gobby-0.5.0/0000755000175000017500000000000012376162134007624 500000000000000gobby-0.5.0/win32/0000755000175000017500000000000012376162130010562 500000000000000gobby-0.5.0/win32/Makefile.in0000644000175000017500000002671212376162115012562 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = win32 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ @WIN32_TRUE@BUILT_SOURCES = gobby.res EXTRA_DIST = gobby.ico gobby.rc all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign win32/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign win32/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: 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: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile installdirs: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: all check install install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-generic pdf pdf-am ps ps-am uninstall uninstall-am @WIN32_TRUE@gobby.res: gobby.rc @WIN32_TRUE@ $(WINDRES) -i gobby.rc --input-format=rc -o gobby.res -O coff # 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: gobby-0.5.0/win32/Makefile.am0000644000175000017500000000023612364474462012552 00000000000000if WIN32 gobby.res: gobby.rc $(WINDRES) -i gobby.rc --input-format=rc -o gobby.res -O coff BUILT_SOURCES = gobby.res endif EXTRA_DIST = gobby.ico gobby.rc gobby-0.5.0/win32/gobby.ico0000644000175000017500000002267611517044575012325 0000000000000000 %(0` &!(:;97: 4:;;;;:70#######################&7D;;;;;;;7& JJJLLLNOOQQQTTTSSSOOOKKKHHHJJJMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKKKABB;<<::: ! Y<;;8- %|||YmmmJJJ___STSJMJAFAAFAJMJSTS\\\qqqEFF[4% ZZZ***&8O"d"$l$&r&(x((x(&r&$m$"f"U>6<><{{{PPP5VVV#!(u(////////////////////////////++1\\\+tttT1@@>><<884411////////////////////B\\\+O}}}VVV???+YYWWTTOOJJCC;;33////////////////<Tn\\\+AAA5+"PC6(& kkqqmmhhaaZZPPGG<<22//////////..#1#c}7U}\\\+ lYFoXs[r[XJC~R`.-+&} [7bbbtu[f*;.-("wCU AAAFMIX.-+%{ _7" ]]]:u7SSS{y{P...6+1r'2m, 2010. msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-08-23 13:43-0400\n" "PO-Revision-Date: 2010-06-20 17:27+0300\n" "Last-Translator: Yannis Kaskamanidis \n" "Language-Team: Ελληνικά \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.0\n" #: ../code/commands/auth-commands.cpp:196 #, fuzzy msgid "Password required" msgstr "Απαιτείται κωδικός πρόσβασης" #: ../code/commands/auth-commands.cpp:214 msgid "Incorrect password" msgstr "" #: ../code/commands/browser-commands.cpp:288 msgid "Subscribing to %1..." msgstr "Εγγραφή στο %1..." #: ../code/commands/browser-commands.cpp:301 msgid "Subscribing to chat on %1..." msgstr "Εγγραφή στη συνομιλία %1..." #: ../code/commands/browser-commands.cpp:591 msgid "Subscription failed" msgstr "Η εγγραφή απέτυχε" #: ../code/commands/browser-context-commands.cpp:86 msgid "Could not find a location where to store the certificate" msgstr "" #: ../code/commands/browser-context-commands.cpp:153 msgid "_Remove" msgstr "" #: ../code/commands/browser-context-commands.cpp:188 #, fuzzy msgid "_Disconnect from Server" msgstr "Σύνδεση στον διακομιστή" #: ../code/commands/browser-context-commands.cpp:220 #, fuzzy msgid "Create _Account..." msgstr "Δημιουργία εγγράφου..." #: ../code/commands/browser-context-commands.cpp:245 msgid "Create Do_cument..." msgstr "Δημιουργία εγγράφου..." #: ../code/commands/browser-context-commands.cpp:280 #, fuzzy msgid "Create Di_rectory..." msgstr "Δημιουργία φακέλου..." #: ../code/commands/browser-context-commands.cpp:293 msgid "_Open Document..." msgstr "Άνοιγμα εγγράφου..." #: ../code/commands/browser-context-commands.cpp:312 msgid "_Permissions..." msgstr "" #: ../code/commands/browser-context-commands.cpp:324 msgid "D_elete" msgstr "Διαγραφή" #: ../code/commands/browser-context-commands.cpp:405 msgid "Choose a name for the directory" msgstr "Επιλογή ονόματος για τον φάκελο" #: ../code/commands/browser-context-commands.cpp:406 msgid "Choose a name for the document" msgstr "Επιλογή ονόματος για το έγγραφο" #: ../code/commands/browser-context-commands.cpp:407 msgid "_Directory Name:" msgstr "Όνομα φακέλου:" #: ../code/commands/browser-context-commands.cpp:408 msgid "_Document Name:" msgstr "Όνομα εγγράφου:" #: ../code/commands/browser-context-commands.cpp:411 msgid "C_reate" msgstr "Δημιουργία" #: ../code/commands/browser-context-commands.cpp:415 msgid "New Directory" msgstr "Νέος φάκελος" #: ../code/commands/browser-context-commands.cpp:416 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "Νέο έγγραφο" #: ../code/commands/browser-context-commands.cpp:436 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "Επιλογή ενός αρχείου κειμένου για άνοιγμα" #: ../code/commands/browser-context-commands.cpp:558 #: ../code/commands/browser-context-commands.cpp:569 msgid "Account successfully created" msgstr "" #: ../code/commands/browser-context-commands.cpp:562 msgid "When re-connecting to the server, the new account will be used." msgstr "" #: ../code/commands/browser-context-commands.cpp:573 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:586 #, fuzzy msgid "Failed to create account" msgstr "Αποτυχία δημιουργίας εγγράφου \"%1\"" #: ../code/commands/browser-context-commands.cpp:589 msgid "Could not save the certificate for the account: %1" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "Επιλογή τοποθεσίας για εξαγωγή του εγγράφου \"%1\" στο" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "Ερώτημα \"%1\"..." #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:474 #: ../code/operations/operation-open-multiple.cpp:180 msgid "Failed to open document \"%1\"" msgstr "Αποτυχία ανοίγματος του εγγράφου \"%1\"" #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "Επιλογή τοποθεσίας για αποθήκευση του εγγράφου \"%1\" στο" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:70 msgid "There was an error displaying help." msgstr "Υπήρξε κάποιο σφάλμα κατά την προβολή της βοήθειας." #: ../code/commands/help-commands.cpp:93 msgid "Contributors:" msgstr "Άτομα που συνεισέφεραν:" #: ../code/commands/help-commands.cpp:99 msgid "British English:" msgstr "Αγγλικά (Βρετανίας):" #: ../code/commands/help-commands.cpp:101 msgid "German:" msgstr "Γερμανικά:" #: ../code/commands/help-commands.cpp:118 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" "Η σύνδεση με τον εκδότη αυτού του εγγράφου χάθηκε. Περισσότερες αλλαγές στο " "έγγραφο δεν είναι πλέον δυνατόν να συγχρονιστούν με άλλους χρήστες. Η " "επεξεργασία του εγγράφου δεν είναι πια δυνατή.\n" "\n" "Παρακαλώ σημειώστε ότι είναι δυνατόν να μην έχουν φθάσει στον εκδότη όλες οι " "τελευταίες αλλαγές πριν τη διακοπή της σύνδεσης." #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "Συγχρονισμός σε εξέλιξη... %1%%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "Αυτό το έγγραφο δεν μπορεί να χρησιμοποιηθεί." #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" "Εάν υποψιάζεστε τι μπορεί να προκάλεσε το πρόβλημα, προσπαθήστε να το λύσετε " "και ξαναπροσπαθήστε (αφού έχετε κλείσει το έγγραφο). Διαφορετικά, πιθανόν να " "πρόκειται για κάποιο σφάλμα του λογισμικού. Σε αυτή την περίπτωση, στείλτε " "μια αναφορά σφάλματος στο http://gobby.0x539.de/trac/newticket και προσθέστε " "όσες περισσότερες πληροφορίες μπορείτε, καθώς και το τι κάνατε όταν συνέβη " "το πρόβλημα. Επίσης, δώστε πληροφορίες σχετικά με το πώς μπορεί να γίνει " "αναπαραγωγή του προβλήματος (αν κάτι τέτοιο είναι εφικτό), ώστε να " "διορθώσουμε το πρόβλημα σε μια επόμενη έκδοση. Ευχαριστούμε." #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "Ο συγχρονισμός απέτυχε: %1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" "Μπορείτε ακόμη να παρακολουθείτε άλλους να επεξεργάζονται το έγγραφο, αλλά " "δεν μπορείτε εσείς να συμμετέχετε στην επεξεργασία." #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "Η σύνδεση του χρήστη απέτυχε: %1" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:111 msgid "_Direct Connection" msgstr "Άμεση σύνδεση" #: ../code/core/browser.cpp:113 msgid "Host Name:" msgstr "Όνομα κόμβου:" #: ../code/core/certificatemanager.cpp:83 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:276 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:338 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:414 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/foldermanager.cpp:322 msgid "The document has been removed from the server." msgstr "" #: ../code/core/header.cpp:203 msgid "_None" msgstr "Κανένα" #: ../code/core/header.cpp:227 msgid "_File" msgstr "Αρχείο" #: ../code/core/header.cpp:230 msgid "_Open..." msgstr "Άνοιγμα..." #: ../code/core/header.cpp:233 msgid "Open _Location..." msgstr "Άνοιγμα τοποθεσίας..." #: ../code/core/header.cpp:237 msgid "Save _As..." msgstr "Αποθήκευση ως..." #: ../code/core/header.cpp:241 ../code/core/iconmanager.cpp:43 msgid "Save All" msgstr "Αποθήκευση όλων" #: ../code/core/header.cpp:241 msgid "Save all open files locally" msgstr "Αποθήκευση όλων των ανοιχτών αρχείων τοπικά" #: ../code/core/header.cpp:243 msgid "Export As _HTML..." msgstr "Εξαγωγή ως HTML..." #: ../code/core/header.cpp:246 msgid "Connect _to Server..." msgstr "Σύνδεση στον διακομιστή..." #: ../code/core/header.cpp:251 msgid "_Edit" msgstr "Επεξεργασία" #: ../code/core/header.cpp:259 msgid "_Find..." msgstr "Εύρεση..." #: ../code/core/header.cpp:261 msgid "Find Ne_xt" msgstr "Εύρεση επόμενου" #: ../code/core/header.cpp:262 msgid "Find next match of phrase searched for" msgstr "Εύρεση επόμενης φράσης που ταιριάζει με αυτήν που αναζητάτε" #: ../code/core/header.cpp:265 msgid "Find Pre_vious" msgstr "Εύρεση προηγούμενου" #: ../code/core/header.cpp:266 msgid "Find previous match of phrase searched for" msgstr "Εύρεση προηγούμενης φράσης που ταιριάζει με αυτήν που αναζητάτε" #: ../code/core/header.cpp:271 msgid "Find and Rep_lace..." msgstr "Εύρεση και αντικατάσταση..." #: ../code/core/header.cpp:275 msgid "Go to _Line..." msgstr "Μετάβαση στη γραμμή..." #: ../code/core/header.cpp:279 msgid "Pr_eferences..." msgstr "Προτιμήσεις..." #: ../code/core/header.cpp:281 msgid "_View" msgstr "Προβολή" #: ../code/core/header.cpp:284 msgid "Reset User Colors" msgstr "Επαναφορά χρωμάτων χρήστη" #: ../code/core/header.cpp:285 msgid "Hide user colors in current document" msgstr "Απόκρυψη χρωμάτων χρήστη στο τρέχον έγγραφο" #: ../code/core/header.cpp:289 msgid "Fullscreen" msgstr "" #: ../code/core/header.cpp:290 msgid "Show the editing window in fullscreen mode" msgstr "" #: ../code/core/header.cpp:294 msgid "Zoom In" msgstr "" #: ../code/core/header.cpp:297 msgid "Zoom Out" msgstr "" #: ../code/core/header.cpp:300 msgid "View Toolbar" msgstr "Προβολή γραμμής εργαλείων" #: ../code/core/header.cpp:301 msgid "Whether to show the toolbar" msgstr "Αν θα εμφανίζεται η γραμμή εργαλείων" #: ../code/core/header.cpp:305 msgid "View Statusbar" msgstr "Προβολή γραμμής κατάστασης" #: ../code/core/header.cpp:306 msgid "Whether to show the statusbar" msgstr "Αν θα εμφανίζεται η γραμμή κατάστασης" #: ../code/core/header.cpp:310 msgid "View Document Browser" msgstr "Προβολή περιηγητή εγγράφου" #: ../code/core/header.cpp:311 msgid "Whether to show the document browser" msgstr "Αν θα εμφανίζεται ο περιηγητής εγγράφου" #: ../code/core/header.cpp:315 msgid "View Chat" msgstr "Προβολή συνομιλίας" #: ../code/core/header.cpp:316 msgid "Whether to show the chat pane" msgstr "Εάν θα εμφανίζεται το παράθυρο συνομιλίας" #: ../code/core/header.cpp:320 msgid "View Document User List" msgstr "Προβολή καταλόγου χρηστών του εγγράφου" #: ../code/core/header.cpp:321 msgid "Whether to show the user list for documents" msgstr "Εάν θα εμφανίζεται ο κατάλογος χρηστών για τα έγγραφα" #: ../code/core/header.cpp:325 msgid "View Chat User List" msgstr "Προβολή καταλόγου χρηστών συνομιλίας" #: ../code/core/header.cpp:326 msgid "Whether to show the user list for the chat" msgstr "Εάν θα εμφανίζεται ο κατάλογος χρηστών της συνομιλίας" #: ../code/core/header.cpp:330 msgid "_Highlight Mode" msgstr "Λειτουργία επισήμανσης" #: ../code/core/header.cpp:336 msgid "_Help" msgstr "Βοήθεια" #: ../code/core/header.cpp:339 msgid "_Contents" msgstr "Περιεχόμενα" #: ../code/core/header.cpp:340 msgid "Opens the Gobby manual" msgstr "Ανοίγει το εγχειρίδιο του Gobby" #: ../code/core/header.cpp:343 msgid "_About..." msgstr "Σχετικά..." #: ../code/core/header.cpp:344 msgid "Shows Gobby's copyright and credits" msgstr "Εμφανίζει τα πνευματικά δικαιώματα και τα εύσημα για το Gobby" #: ../code/core/iconmanager.cpp:49 msgid "User list" msgstr "Κατάλογος χρηστών" #: ../code/core/iconmanager.cpp:55 msgid "Document list" msgstr "Κατάλογος εγγράφων" #: ../code/core/iconmanager.cpp:61 ../code/window.cpp:52 msgid "Chat" msgstr "Συνομιλία" #: ../code/core/iconmanager.cpp:68 msgid "User Color Indicator" msgstr "Ένδειξη χρώματος χρήστη" #: ../code/core/selfhoster.cpp:103 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:135 #, fuzzy msgid "Failed to generate Diffie-Hellman parameters" msgstr "Αποτυχία διαγραφής διακομιστή %1: %2" #: ../code/core/selfhoster.cpp:137 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:262 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:282 #, fuzzy msgid "Failed to share documents" msgstr "Αποτυχία αποθήκευσης εγγράφου \"%1\"" #: ../code/core/sessionuserview.cpp:39 msgid "User List" msgstr "Κατάλογος χρηστών" #: ../code/core/statusbar.cpp:418 msgid "Ln %1, Col %2\t%3" msgstr "Ln %1, Col %2\t%3" #: ../code/core/statusbar.cpp:421 msgid "OVR" msgstr "OVR" #: ../code/core/statusbar.cpp:421 msgid "INS" msgstr "INS" #: ../code/core/textsessionview.cpp:638 msgid "Text written by %1" msgstr "Κείμενο που συντάχθηκε από τον/την %1" #: ../code/core/textsessionview.cpp:644 msgid "Unowned text" msgstr "Κείμενο που δεν ανήκει σε κανέναν" #: ../code/core/userlist.cpp:108 msgid "Users" msgstr "Χρήστες" #: ../code/dialogs/connection-dialog.cpp:26 msgid "Connect to Server" msgstr "Σύνδεση στον διακομιστή" #: ../code/dialogs/connection-dialog.cpp:30 msgid "Please enter a host name with which to establish a connection." msgstr "" "Παρακαλώ εισάγετε το όνομα του διακομιστή με τον οποίο θα γίνει η σύνδεση." #: ../code/dialogs/connection-dialog.cpp:32 msgid "_Remote Endpoint:" msgstr "Απομακρυσμένο τελικό σημείο:" #: ../code/dialogs/document-location-dialog.cpp:28 msgid "Document Name:" msgstr "Όνομα εγγράφου:" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Select document's target location" msgstr "Επιλογή θέσης προορισμού του εγγράφου" #: ../code/dialogs/document-location-dialog.cpp:157 msgid "Choose a directory to create the document into:" msgstr "Επιλογή φακέλου για δημιουργία εγγράφου μέσα σ' αυτόν:" #: ../code/dialogs/document-location-dialog.cpp:163 msgid "Select documents' target location" msgstr "Επιλογή θέσης προορισμού του εγγράφου" #: ../code/dialogs/document-location-dialog.cpp:165 msgid "Choose a directory to create the documents into:" msgstr "Επιλογή φακέλου για δημιουργία εγγράφου μέσα σ' αυτόν:" #: ../code/dialogs/find-dialog.cpp:44 ../code/dialogs/find-dialog.cpp:142 msgid "Find" msgstr "Εύρεση" #: ../code/dialogs/find-dialog.cpp:47 msgid "_Search for:" msgstr "Εύρεση για:" #: ../code/dialogs/find-dialog.cpp:49 msgid "Replace _with:" msgstr "Αντικατάσταση με:" #: ../code/dialogs/find-dialog.cpp:51 msgid "_Match case" msgstr "Ταίριασμα" #: ../code/dialogs/find-dialog.cpp:52 msgid "Match _entire word only" msgstr "Ταίριασμα μόνον ολόκληρης λέξης" #: ../code/dialogs/find-dialog.cpp:53 msgid "Search _backwards" msgstr "Αναζήτηση προς τα πίσω" #: ../code/dialogs/find-dialog.cpp:54 msgid "Wra_p around" msgstr "Αναδίπλωση ολόγυρα" #: ../code/dialogs/find-dialog.cpp:100 msgid "Replace _All" msgstr "Αντικατάσταση όλων" #: ../code/dialogs/find-dialog.cpp:102 msgid "_Replace" msgstr "Αντικατάσταση" #: ../code/dialogs/find-dialog.cpp:142 msgid "Replace" msgstr "Αντικατάσταση" #: ../code/dialogs/find-dialog.cpp:161 ../code/dialogs/find-dialog.cpp:177 msgid "Phrase \"%1\" has not been found" msgstr "Η φράση \"%1\" δεν βρέθηκε" #: ../code/dialogs/find-dialog.cpp:335 msgid "No occurrence has been replaced" msgstr "Τίποτε δεν αντικαταστάθηκε" #: ../code/dialogs/find-dialog.cpp:341 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "%1 αντικαταστάθηκε" msgstr[1] "%1 αντικαταστάθηκαν" #: ../code/dialogs/goto-dialog.cpp:26 msgid "Go to line" msgstr "Μετάβαση στη γραμμή" #: ../code/dialogs/goto-dialog.cpp:29 msgid "Line _number:" msgstr "Αριθμός γραμμής:" #: ../code/dialogs/goto-dialog.cpp:50 msgid "Go To _Line" msgstr "Μετάβαση στη γραμμή" #: ../code/dialogs/initial-dialog.cpp:76 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:99 #, fuzzy msgid "Failed to generate private key" msgstr "Αποτυχία διαγραφής διακομιστή %1: %2" #: ../code/dialogs/initial-dialog.cpp:102 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:141 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:144 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:198 msgid "Choose a user color" msgstr "Επιλογή χρώματος χρήστη" #: ../code/dialogs/initial-dialog.cpp:204 msgid "Welcome to Gobby" msgstr "Καλωσήρθατε στο Gobby" #: ../code/dialogs/initial-dialog.cpp:216 msgid "" "Before we start, a few options need to be configured. You can later change " "them by choosing Edit ▸ Preferences from the menu." msgstr "" "Πριν ξεκινήσουμε, καλό είναι να ρυθμίσουμε ορισμένες επιλογές. Αργότερα " "μπορούμε να τις αλλάξουμε επιλέγοντας το μενού Επεξεργασία ▸ Προτιμήσεις." #: ../code/dialogs/initial-dialog.cpp:224 msgid "User Name" msgstr "Όνομα χρήστη" #: ../code/dialogs/initial-dialog.cpp:226 msgid "Your name as shown to other users." msgstr "Το όνομά σας όπως το βλέπουν οι άλλοι χρήστες" #: ../code/dialogs/initial-dialog.cpp:235 msgid "User Color" msgstr "Χρώμα χρήστη" #: ../code/dialogs/initial-dialog.cpp:237 msgid "The color with which text you have written is branded." msgstr "Το χρώμα με το οποίο έχετε γράψει το κείμενό σας είναι επώνυμο." #: ../code/dialogs/initial-dialog.cpp:256 #, fuzzy msgid "Remote Connections" msgstr "Ασφαλής σύνδεση" #: ../code/dialogs/initial-dialog.cpp:262 #: ../code/dialogs/preferences-dialog.cpp:217 msgid "Allow remote users to edit local documents" msgstr "" #: ../code/dialogs/initial-dialog.cpp:268 msgid "Ask remote users for a password" msgstr "" #: ../code/dialogs/initial-dialog.cpp:273 #: ../code/dialogs/preferences-dialog.cpp:220 #, fuzzy msgid "Password:" msgstr "Κωδικός πρόσβασης διακομιστή:" #: ../code/dialogs/initial-dialog.cpp:297 msgid "No authentication (Not recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:304 msgid "" "Don't authenticate ourselves to remote users. Data transfer will be " "unencrypted." msgstr "" #: ../code/dialogs/initial-dialog.cpp:313 msgid "Create a self-signed certificate (Recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:321 msgid "" "It may take a minute or two until remote users can connect while the " "security certificate is being generated." msgstr "" #: ../code/dialogs/initial-dialog.cpp:331 msgid "Use an existing certificate (Expert option)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:338 msgid "" "Use an existing private key and certificate for authentication. The files " "must be in PEM format." msgstr "" #: ../code/dialogs/initial-dialog.cpp:347 #: ../code/dialogs/preferences-dialog.cpp:766 msgid "Private key:" msgstr "" #: ../code/dialogs/initial-dialog.cpp:349 #: ../code/dialogs/preferences-dialog.cpp:772 msgid "Certificate:" msgstr "" #: ../code/dialogs/open-location-dialog.cpp:26 msgid "Open Location" msgstr "Άνοιγμα τοποθεσίας" #: ../code/dialogs/open-location-dialog.cpp:27 msgid "Enter the _location (URI) of the file you would like to open:" msgstr "Εισαγωγή της τοποθεσίας (URI) του αρχείου που θέλετε να ανοίξετε:" #: ../code/dialogs/password-dialog.cpp:25 msgid "Password Required" msgstr "Απαιτείται κωδικός πρόσβασης" #: ../code/dialogs/password-dialog.cpp:31 msgid "Connection to host \"%1\" requires a password." msgstr "Η σύνδεση με τον διακομιστή \"%1\" απαιτεί κωδικό πρόσβασης." #: ../code/dialogs/password-dialog.cpp:32 msgid "Invalid password for host \"%1\". Please try again." msgstr "" "Μη έγκυρος κωδικός πρόσβασης για τον διακομιστή \"%1\". Παρακαλώ προσπαθήστε " "πάλι." #: ../code/dialogs/password-dialog.cpp:35 msgid "Server _Password:" msgstr "Κωδικός πρόσβασης διακομιστή:" #: ../code/dialogs/preferences-dialog.cpp:198 msgid "Settings" msgstr "Ρυθμίσεις" #: ../code/dialogs/preferences-dialog.cpp:199 #, fuzzy msgid "Remote Users" msgstr "Επαναφορά χρωμάτων χρήστη" #: ../code/dialogs/preferences-dialog.cpp:200 #, fuzzy msgid "Local Documents" msgstr "Νέο έγγραφο" #: ../code/dialogs/preferences-dialog.cpp:202 msgid "User name:" msgstr "Όνομα χρήστη:" #: ../code/dialogs/preferences-dialog.cpp:204 msgid "User color:" msgstr "Χρώμα χρήστη:" #: ../code/dialogs/preferences-dialog.cpp:206 msgid "Color intensity:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:208 msgid "Choose a new user color" msgstr "Επιλογή νέου χρώματος χρήστη" #: ../code/dialogs/preferences-dialog.cpp:209 msgid "Show cursors of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:210 msgid "Show selections of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:212 #, fuzzy msgid "Highlight current line of remote users" msgstr "Επισήμανση τρέχουσας γραμμής" #: ../code/dialogs/preferences-dialog.cpp:214 msgid "Indicate cursor position of remote users in the scrollbar" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:219 msgid "Require remote users to enter a password" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:222 msgid "Port:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:226 msgid "Remember local documents after Gobby restart" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:227 #, fuzzy msgid "Local documents directory:" msgstr "Φάκελος κόμβου:" #: ../code/dialogs/preferences-dialog.cpp:423 msgid "Tab Stops" msgstr "Στηλοθέτες" #: ../code/dialogs/preferences-dialog.cpp:424 msgid "Indentation" msgstr "Εσοχή" #: ../code/dialogs/preferences-dialog.cpp:425 msgid "Home/End Behavior" msgstr "Συμπεριφορά πλήκτρων Home/End" #: ../code/dialogs/preferences-dialog.cpp:426 msgid "File Saving" msgstr "Αποθήκευση αρχείου" #: ../code/dialogs/preferences-dialog.cpp:427 msgid "_Tab width:" msgstr "Πλάτος στηλοθέτη:" #: ../code/dialogs/preferences-dialog.cpp:429 msgid "Insert _spaces instead of tabs" msgstr "Εισαγωγή διαστημάτων αντί και στηλοθέτες" #: ../code/dialogs/preferences-dialog.cpp:430 msgid "Enable automatic _indentation" msgstr "Ενεργοποίηση αυτόματης εισαγωγής εσοχών" #: ../code/dialogs/preferences-dialog.cpp:431 msgid "Smart _home/end" msgstr "Έξυπνο Home/End" #: ../code/dialogs/preferences-dialog.cpp:432 msgid "Enable _automatic saving of documents" msgstr "Ενεργοποίηση αυτόματης αποθήκευσης εγγράφων" #: ../code/dialogs/preferences-dialog.cpp:434 msgid "Autosave interval in _minutes:" msgstr "Χρονικό διάστημα αυτόματης αποθήκευσης σε λεπτά:" #: ../code/dialogs/preferences-dialog.cpp:455 msgid "" "With this option enabled, Home/End keys move to first/last character before " "going to the start/end of the line." msgstr "" "Με αυτή την επιλογή ενεργοποιημένη, τα πλήκτρα Home/End μας μετακινούν στον " "πρώτο/τελευταίο χαρακτήρα πριν μεταβούμε στην αρχή/τέλος της γραμμής." #: ../code/dialogs/preferences-dialog.cpp:525 msgid "Text Wrapping" msgstr "Αναδίπλωση κειμένου" #: ../code/dialogs/preferences-dialog.cpp:526 msgid "Line Numbers" msgstr "Αριθμοί γραμμών" #: ../code/dialogs/preferences-dialog.cpp:527 msgid "Current Line" msgstr "Τρέχουσα γραμμή" #: ../code/dialogs/preferences-dialog.cpp:528 msgid "Right Margin" msgstr "Δεξί περιθώριο" #: ../code/dialogs/preferences-dialog.cpp:529 msgid "Bracket Matching" msgstr "Αγκύλες ταιριάσματος" #: ../code/dialogs/preferences-dialog.cpp:530 msgid "Whitespace Display" msgstr "Εμφάνιση λευκού διαστήματος" #: ../code/dialogs/preferences-dialog.cpp:531 msgid "Enable text wrapping" msgstr "Ενεργοποίηση αναδίπλωσης κειμένου" #: ../code/dialogs/preferences-dialog.cpp:532 msgid "Do not split words over two lines" msgstr "Να μη διαχωρίζονται οι λέξεις σε περισσότερες από δυο γραμμές" #: ../code/dialogs/preferences-dialog.cpp:533 msgid "Display line numbers" msgstr "Εμφάνιση αριθμών στις γραμμές" #: ../code/dialogs/preferences-dialog.cpp:534 msgid "Highlight current line" msgstr "Επισήμανση τρέχουσας γραμμής" #: ../code/dialogs/preferences-dialog.cpp:535 msgid "Display right margin" msgstr "Εμφάνιση δεξιού περιθωρίου" #: ../code/dialogs/preferences-dialog.cpp:536 msgid "Right margin at column:" msgstr "Δεξί περιθώριο σε στήλη:" #: ../code/dialogs/preferences-dialog.cpp:537 msgid "Highlight matching bracket" msgstr "Επισήμανση αγκύλης ταιριάσματος" #: ../code/dialogs/preferences-dialog.cpp:589 msgid "Display no whitespace" msgstr "Απόκρυψη λευκού διαστήματος" #: ../code/dialogs/preferences-dialog.cpp:592 msgid "Display spaces" msgstr "Εμφάνιση διαστημάτων" #: ../code/dialogs/preferences-dialog.cpp:596 msgid "Display tabs" msgstr "Εμφάνιση στηλοθετών" #: ../code/dialogs/preferences-dialog.cpp:600 msgid "Display tabs and spaces" msgstr "Εμφάνιση στηλοθετών και διαστημάτων" #: ../code/dialogs/preferences-dialog.cpp:651 msgid "Toolbar" msgstr "Γραμμή εργαλείων" #: ../code/dialogs/preferences-dialog.cpp:652 msgid "Font" msgstr "Γραμματοσειρά" #: ../code/dialogs/preferences-dialog.cpp:653 msgid "Color Scheme" msgstr "Απεικόνιση χρώματος" #: ../code/dialogs/preferences-dialog.cpp:661 msgid "Show text only" msgstr "Εμφάνιση μόνο του κειμένου" #: ../code/dialogs/preferences-dialog.cpp:663 msgid "Show icons only" msgstr "Εμφάνιση μόνο των εικονιδίων" #: ../code/dialogs/preferences-dialog.cpp:665 msgid "Show both icons and text" msgstr "Εμφάνιση εικονιδίων και κειμένου" #: ../code/dialogs/preferences-dialog.cpp:667 msgid "Show text besides icons" msgstr "Εμφάνιση κειμένου δίπλα στα εικονίδια" #: ../code/dialogs/preferences-dialog.cpp:756 msgid "Trusted CAs" msgstr "Έμπιστα CAs" #: ../code/dialogs/preferences-dialog.cpp:757 msgid "Secure Connection" msgstr "Ασφαλής σύνδεση" #: ../code/dialogs/preferences-dialog.cpp:758 #, fuzzy msgid "Authentication" msgstr "Εσοχή" #: ../code/dialogs/preferences-dialog.cpp:759 msgid "Select a file containing trusted CAs" msgstr "Επιλογή αρχείου που περιέχει έμπιστα CAs" #: ../code/dialogs/preferences-dialog.cpp:764 #, fuzzy msgid "None" msgstr "Κανένα" #: ../code/dialogs/preferences-dialog.cpp:765 msgid "Use a certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:767 msgid "Select a private key file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:769 #: ../code/dialogs/preferences-dialog.cpp:776 #, fuzzy msgid "Create New..." msgstr "Δημιουργία εγγράφου..." #: ../code/dialogs/preferences-dialog.cpp:773 msgid "Select a certificate file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:801 msgid "Use TLS if possible" msgstr "Χρήση TLS εάν είναι δυνατό" #: ../code/dialogs/preferences-dialog.cpp:804 msgid "Always use TLS" msgstr "Παντοτινή χρήση TLS" #: ../code/dialogs/preferences-dialog.cpp:892 msgid "Error reading file:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:916 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:948 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:966 msgid "Select a location for the generated certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:1068 msgid "Preferences" msgstr "Προτιμήσεις" #: ../code/dialogs/preferences-dialog.cpp:1073 msgid "User" msgstr "Χρήστης" #: ../code/dialogs/preferences-dialog.cpp:1074 msgid "Editor" msgstr "Επεξεργαστής" #: ../code/dialogs/preferences-dialog.cpp:1075 msgid "View" msgstr "Προβολή" #: ../code/dialogs/preferences-dialog.cpp:1076 msgid "Appearance" msgstr "Εμφάνιση" #: ../code/dialogs/preferences-dialog.cpp:1077 msgid "Security" msgstr "Ασφάλεια" #: ../code/main.cpp:194 msgid "Gobby options" msgstr "Επιλογές του Gobby" #: ../code/main.cpp:194 msgid "Options related to Gobby" msgstr "Επιλογές σχετικές με το Gobby" #: ../code/main.cpp:199 msgid "Display version information and exit" msgstr "Εμφάνιση πληροφοριών έκδοσης και έξοδος" #: ../code/main.cpp:206 msgid "Also start a new Gobby instance when there is one running already" msgstr "" "Έναρξη ενός νέου στιγμιότυπου Gobby όταν υπάρχει ένα που ήδη εκτελείται." #: ../code/main.cpp:214 msgid "Connect to given host on startup, can be given multiple times" msgstr "" "Η σύνδεση με τον συγκεκριμένο διακομιστή κατά την έναρξη, μπορεί να δοθεί " "πολλές φορές." #: ../code/main.cpp:215 msgid "HOSTNAME" msgstr "Όνομα διακομιστή" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "Αφαίρεση διακομιστή %1..." #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "Αποτυχία διαγραφής διακομιστή %1: %2" #: ../code/operations/operation-export-html.cpp:168 #, c-format msgid "written by: %s" msgstr "συντάχθηκε από τον/την: %s" #: ../code/operations/operation-export-html.cpp:241 msgid "" msgstr "<αδυναμία εκτύπωσης της ημερομηνίας>" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:254 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "Έγγραφο που δημιουργήθηκε από τους %1$s:%2$s at %3$s by %4$s" #: ../code/operations/operation-export-html.cpp:395 msgid "Participants" msgstr "Συμμετέχοντες" #: ../code/operations/operation-export-html.cpp:475 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "Εξαγωγή εγγράφου \"%1\" σε \"%2\" σε HTML..." #: ../code/operations/operation-export-html.cpp:536 msgid "Failed to export document \"%1\" to HTML" msgstr "Αποτυχία εξαγωγής του εγγράφου \"%1\" σε HTML" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "Δημιουργία φακέλου \"%1\"..." #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "Δημιουργία εγγράφου \"%1\"..." #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "Αποτυχία δημιουργίας φακέλου \"%1\"" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "Αποτυχία δημιουργίας εγγράφου \"%1\"" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "ISO-8859-1" #: ../code/operations/operation-open.cpp:114 msgid "Opening document \"%1\"..." msgstr "Άνοιγμα εγγράφου \"%1\"..." #: ../code/operations/operation-open.cpp:134 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "" "Ο φάκελος στον οποίο υποτίθεται ότι θα αποθηκευόταν το νέο έγγραφο έχει " "αφαιρεθεί." #: ../code/operations/operation-open.cpp:323 msgid "The file contains data not in the specified encoding" msgstr "" "Το αρχείο περιέχει δεδομένα που δεν διαθέτουν την καθορισμένη κωδικοποίηση." #: ../code/operations/operation-open.cpp:334 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "" "Είτε το αρχείο περιέχει δεδομένα σε άγνωστη κωδικοποίηση, είτε περιέχει " "δυαδικά δεδομένα." #: ../code/operations/operation-open-multiple.cpp:91 msgid "Parent folder was removed" msgstr "Ο γονικός φάκελος αφαιρέθηκε" #: ../code/operations/operation-open-multiple.cpp:193 msgid "Failed to open multiple documents" msgstr "Αποτυχία ανοίγματος πολλαπλών εγγράφων" #: ../code/operations/operation-save.cpp:97 msgid "Saving document \"%1\" to \"%2\"..." msgstr "Αποθήκευση εγγράφου \"%1\" στο \"%2\"..." #: ../code/operations/operation-save.cpp:226 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" "Το έγγραφο περιέχει έναν ή περισσότερους χαρακτήρες που δεν μπορούν να " "κωδικοποιηθούν στην καθορισμένη κωδικοποίηση χαρακτήρων." #: ../code/operations/operation-save.cpp:287 msgid "Failed to save document \"%1\"" msgstr "Αποτυχία αποθήκευσης εγγράφου \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "Αποτυχία ανοίγματος του εγγράφου \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 #, fuzzy msgid "Subscribing to \"%1\"..." msgstr "Εγγραφή στο %1..." #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "Αποτυχία δημιουργίας φακέλου \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "Η σύνδεση στο \"%1\" απέτυχε" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 #, fuzzy msgid "Could not subscribe to \"%1\"" msgstr "Αδυναμία επίλυσης \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "Η συσκευή \"%1\" δεν υπάρχει" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "Αδυναμία δημιουργίας φακέλου \"%1\": %2" #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "Η συσκευή \"%1\" δεν υπάρχει" #: ../code/window.cpp:104 msgid "This Computer" msgstr "" #: ../code/window.cpp:129 msgid "Document Browser" msgstr "Περιηγητής εγγράφου" #: ../code/window.cpp:182 msgid "You are still connected to a session" msgstr "Είστε ακόμη συνδεδεμένοι σε μια συνεδρία" #: ../code/window.cpp:190 msgid "Do you want to close Gobby nevertheless?" msgstr "Θέλετε παρόλα αυτά να κλείσετε το Gobby;" #: ../code/window.cpp:196 msgid "C_ancel" msgstr "Άκυρο" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "Gobby" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "Συνεργατικός επεξεργαστής κειμένων" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "Συνεργατικός επεξεργαστής κειμένων Gobby (0.5)" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "Συνεργατική επεξεργασία αρχείων κειμένου" #~ msgid "" #~ "This program is free software; you can redistribute it and/or modify it " #~ "under the terms of the GNU General Public License as published by the " #~ "Free Software Foundation; either version 2 of the License, or (at your " #~ "option) any later version.\n" #~ "\n" #~ "This program is distributed in the hope that it will be useful, but " #~ "WITHOUT ANY WARRANTY; without even the implied warranty of " #~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General " #~ "Public License for more details.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgstr "" #~ "Αυτή η εφαρμογή είναι Ελεύθερο Λογισμικό. Μπορείτε να την αναδιανείμετε ή " #~ "να την τροποποιήσετε υπό τους όρους της Γενικής Δημόσιας Άδειας GNU, όπως " #~ "έχει δημοσιευτεί από το Ίδρυμα Ελεύθερου Λογισμικού (FSF), είτε την " #~ "έκδοση 2, είτε (ανάλογα με τις προθέσεις σας) με κάθε επόμενη έκδοση.\n" #~ "\n" #~ "Αυτή η εφαρμογή διανέμεται με την ελπίδα ότι θα είναι χρήσιμη, αλλά ΧΩΡΙΣ " #~ "ΚΑΜΙΑ ΕΓΓΥΗΣΗ, χωρίς ακόμη υποδηλούμενη εγγύηση ΕΜΠΟΡΕΥΣΙΜΟΤΗΤΑΣ ή " #~ "ΚΑΤΑΛΛΗΛΟΤΗΤΑΣ ΓΙΑ ΣΥΓΚΕΚΡΙΜΕΝΟΥΣ ΣΚΟΠΟΥΣ. Δείτε τη Γενική Δημόσια Άδεια " #~ "GNU για περισσότερες λεπτομέρειες.\n" #~ "\n" #~ "Θα πρέπει να έχετε λάβει ένα αντίγραφο της άδειας αυτής μαζί με την " #~ "εφαρμογή. Εάν όχι, στείλτε μια επιστολή στο Ίδρυμα Ελεύθερου Λογισμικού " #~ "(FSF), Inc., 675 Mass Ave, Cambridge, MA 02139, USA." #~ msgid "User Join in progress..." #~ msgstr "Σύνδεση του χρήστη σε εξέλιξη..." #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "Αδυναμία επίλυσης \"%1\"" #~ msgid "Resolving \"%1\"..." #~ msgstr "Επίλυση \"%1\"..." #~ msgid "Paths" #~ msgstr "Διαδρομές" #~ msgid "" #~ "The directory into which locally hosted sessions are permanently stored" #~ msgstr "" #~ "Ο φάκελος στον οποίο οι τοπικά φιλοξενούμενες συνεδρίες έχουν μόνιμα " #~ "αποθηκευτεί." #~ msgid "Subscription already in progress" #~ msgstr "Εγγραφή ήδη σε εξέλιξη" gobby-0.5.0/po/POTFILES.in0000644000175000017500000000257212376151271011745 00000000000000code/commands/auth-commands.cpp code/commands/browser-commands.cpp code/commands/browser-context-commands.cpp code/commands/file-tasks/task-export-html.cpp code/commands/file-tasks/task-new.cpp code/commands/file-tasks/task-open.cpp code/commands/file-tasks/task-open-file.cpp code/commands/file-tasks/task-save.cpp code/commands/help-commands.cpp code/commands/subscription-commands.cpp code/commands/synchronization-commands.cpp code/commands/user-join-commands.cpp code/core/browser.cpp code/core/certificatemanager.cpp code/core/foldermanager.cpp code/core/header.cpp code/core/iconmanager.cpp code/core/selfhoster.cpp code/core/sessionuserview.cpp code/core/statusbar.cpp code/core/textsessionview.cpp code/core/userlist.cpp code/dialogs/connection-dialog.cpp code/dialogs/document-location-dialog.cpp code/dialogs/find-dialog.cpp code/dialogs/goto-dialog.cpp code/dialogs/initial-dialog.cpp code/dialogs/open-location-dialog.cpp code/dialogs/password-dialog.cpp code/dialogs/preferences-dialog.cpp code/main.cpp code/operations/operation-delete.cpp code/operations/operation-export-html.cpp code/operations/operation-new.cpp code/operations/operation-open.cpp code/operations/operation-open-multiple.cpp code/operations/operation-save.cpp code/operations/operation-subscribe-path.cpp code/util/file.cpp code/util/i18n.cpp code/util/i18n.hpp code/util/uri.cpp code/window.cpp gobby-0.5.desktop.in gobby-0.5.0/po/ja.po0000644000175000017500000011530312376151303011113 00000000000000# Japanese translations for gobby package. # Copyright (C) 2010 THE gobby'S COPYRIGHT HOLDER # This file is distributed under the same license as the gobby package. # , 2010. # msgid "" msgstr "" "Project-Id-Version: gobby 0.4.94\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-08-23 13:43-0400\n" "PO-Revision-Date: 2010-11-19 01:09+0900\n" "Last-Translator: Takahiro Sunaga \n" "Language-Team: Japanese\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../code/commands/auth-commands.cpp:196 #, fuzzy msgid "Password required" msgstr "パスワードが必要です" #: ../code/commands/auth-commands.cpp:214 msgid "Incorrect password" msgstr "" #: ../code/commands/browser-commands.cpp:288 msgid "Subscribing to %1..." msgstr "%1へ加入..." #: ../code/commands/browser-commands.cpp:301 msgid "Subscribing to chat on %1..." msgstr "チャット%1へ加入..." #: ../code/commands/browser-commands.cpp:591 msgid "Subscription failed" msgstr "加入に失敗" #: ../code/commands/browser-context-commands.cpp:86 msgid "Could not find a location where to store the certificate" msgstr "" #: ../code/commands/browser-context-commands.cpp:153 msgid "_Remove" msgstr "" #: ../code/commands/browser-context-commands.cpp:188 #, fuzzy msgid "_Disconnect from Server" msgstr "サーバーへ接続" #: ../code/commands/browser-context-commands.cpp:220 #, fuzzy msgid "Create _Account..." msgstr "ドキュメントの作成(_C)" #: ../code/commands/browser-context-commands.cpp:245 msgid "Create Do_cument..." msgstr "ドキュメントの作成(_C)" #: ../code/commands/browser-context-commands.cpp:280 #, fuzzy msgid "Create Di_rectory..." msgstr "ディレクトリの作成" #: ../code/commands/browser-context-commands.cpp:293 msgid "_Open Document..." msgstr "ドキュメントを開く(_O)" #: ../code/commands/browser-context-commands.cpp:312 msgid "_Permissions..." msgstr "" #: ../code/commands/browser-context-commands.cpp:324 msgid "D_elete" msgstr "削除(_D)" #: ../code/commands/browser-context-commands.cpp:405 msgid "Choose a name for the directory" msgstr "ディレクトリ名の選択" #: ../code/commands/browser-context-commands.cpp:406 msgid "Choose a name for the document" msgstr "ドキュメント名の選択" #: ../code/commands/browser-context-commands.cpp:407 msgid "_Directory Name:" msgstr "ディレクトリ名(_D)" #: ../code/commands/browser-context-commands.cpp:408 msgid "_Document Name:" msgstr "ドキュメント名(_D)" #: ../code/commands/browser-context-commands.cpp:411 msgid "C_reate" msgstr "作成(_C)" #: ../code/commands/browser-context-commands.cpp:415 msgid "New Directory" msgstr "新規ディレクトリ" #: ../code/commands/browser-context-commands.cpp:416 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "新規ドキュメント" #: ../code/commands/browser-context-commands.cpp:436 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "開くテキストファイルの選択" #: ../code/commands/browser-context-commands.cpp:558 #: ../code/commands/browser-context-commands.cpp:569 msgid "Account successfully created" msgstr "" #: ../code/commands/browser-context-commands.cpp:562 msgid "When re-connecting to the server, the new account will be used." msgstr "" #: ../code/commands/browser-context-commands.cpp:573 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:586 #, fuzzy msgid "Failed to create account" msgstr "ドキュメント\"%1\"の作成に失敗しました" #: ../code/commands/browser-context-commands.cpp:589 msgid "Could not save the certificate for the account: %1" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "\"%1\"をエクスポートする先の選択" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "\"%1\"の問い合わせ..." #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:474 #: ../code/operations/operation-open-multiple.cpp:180 msgid "Failed to open document \"%1\"" msgstr "\"%1\"を開くのに失敗しました" #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "\"%1\"を保存する先の選択" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:70 msgid "There was an error displaying help." msgstr "ヘルプ表示時にエラーが発生しました。" #: ../code/commands/help-commands.cpp:93 msgid "Contributors:" msgstr "貢献者:" #: ../code/commands/help-commands.cpp:99 msgid "British English:" msgstr "British English:" #: ../code/commands/help-commands.cpp:101 msgid "German:" msgstr "German:" #: ../code/commands/help-commands.cpp:118 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" "このドキュメントの発行者への接続が失われました。ドキュメントへの変更の同期が" "これ以上できないため、このドキュメントはこれ以上編集できません。\n" "\n" "発行者への接続が失われる前に伝達された変更でも適用されていない可能性がありま" "す。" #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "同期中です... %1%%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "このドキュメントは使用できません。" #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" "もしなにがこの問題を引き起こしているか分かる場合、それを解決してもう一度試し" "てください(このドキュメントを閉じた後)。そうでなければこのソフトウェアのバグ" "の可能性があります。この場合は私たちは今後のバージョンで問題を修復できるよう" "に、http://gobby.0x539.de/trac/newticket(英語)にバグレポートを記録し、この問" "題が起きたときどんな操作をしていたか、または問題の再現の方法(可能ならば)を含" "むできるだけたくさんの情報を提供してください。よろしくお願いします。" #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "同期に失敗しました: %1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" "このドキュメントが他人によって編集されるのを見ることができますが、編集はでき" "ません。" #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "ユーザーの参加に失敗: %1" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:111 msgid "_Direct Connection" msgstr "直接接続(_D)" #: ../code/core/browser.cpp:113 msgid "Host Name:" msgstr "ホスト名:" #: ../code/core/certificatemanager.cpp:83 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:276 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:338 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:414 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/foldermanager.cpp:322 msgid "The document has been removed from the server." msgstr "" #: ../code/core/header.cpp:203 msgid "_None" msgstr "_None" #: ../code/core/header.cpp:227 msgid "_File" msgstr "ファイル(_F)" #: ../code/core/header.cpp:230 msgid "_Open..." msgstr "開く(_O)" #: ../code/core/header.cpp:233 msgid "Open _Location..." msgstr "場所を開く(_L)" #: ../code/core/header.cpp:237 msgid "Save _As..." msgstr "名前をつけて保存(_A)" #: ../code/core/header.cpp:241 ../code/core/iconmanager.cpp:43 msgid "Save All" msgstr "すべて保存" #: ../code/core/header.cpp:241 msgid "Save all open files locally" msgstr "開かれているすべてのファイルをローカルへ保存" #: ../code/core/header.cpp:243 msgid "Export As _HTML..." msgstr "HTMLとしてエクスポート(_H)" #: ../code/core/header.cpp:246 msgid "Connect _to Server..." msgstr "サーバーへ接続(_T)" #: ../code/core/header.cpp:251 msgid "_Edit" msgstr "編集(_E)" #: ../code/core/header.cpp:259 msgid "_Find..." msgstr "検索(_F)" #: ../code/core/header.cpp:261 msgid "Find Ne_xt" msgstr "次を検索(_X)" #: ../code/core/header.cpp:262 msgid "Find next match of phrase searched for" msgstr "フレーズ検索の次を検索" #: ../code/core/header.cpp:265 msgid "Find Pre_vious" msgstr "前を検索(_V)" #: ../code/core/header.cpp:266 msgid "Find previous match of phrase searched for" msgstr "フレーズ検索の前を検索" #: ../code/core/header.cpp:271 msgid "Find and Rep_lace..." msgstr "置換(_L)" #: ../code/core/header.cpp:275 msgid "Go to _Line..." msgstr "指定行へ移動(_L)" #: ../code/core/header.cpp:279 msgid "Pr_eferences..." msgstr "設定(_E)" #: ../code/core/header.cpp:281 msgid "_View" msgstr "表示(_V)" #: ../code/core/header.cpp:284 msgid "Reset User Colors" msgstr "ユーザーカラーをリセット" #: ../code/core/header.cpp:285 msgid "Hide user colors in current document" msgstr "このドキュメントユーザーカラーを非表示" #: ../code/core/header.cpp:289 msgid "Fullscreen" msgstr "" #: ../code/core/header.cpp:290 msgid "Show the editing window in fullscreen mode" msgstr "" #: ../code/core/header.cpp:294 msgid "Zoom In" msgstr "" #: ../code/core/header.cpp:297 msgid "Zoom Out" msgstr "" #: ../code/core/header.cpp:300 msgid "View Toolbar" msgstr "ツールバー" #: ../code/core/header.cpp:301 msgid "Whether to show the toolbar" msgstr "ツールバーを表示するかどうか" #: ../code/core/header.cpp:305 msgid "View Statusbar" msgstr "ステータスバー" #: ../code/core/header.cpp:306 msgid "Whether to show the statusbar" msgstr "ステータスバーを表示するかどうか" #: ../code/core/header.cpp:310 msgid "View Document Browser" msgstr "ドキュメントブラウザ" #: ../code/core/header.cpp:311 msgid "Whether to show the document browser" msgstr "ドキュメントブラウザを表示するかどうか" #: ../code/core/header.cpp:315 msgid "View Chat" msgstr "チャット" #: ../code/core/header.cpp:316 msgid "Whether to show the chat pane" msgstr "チャットを表示するかどうか" #: ../code/core/header.cpp:320 msgid "View Document User List" msgstr "ドキュメントユーザーリスト" #: ../code/core/header.cpp:321 msgid "Whether to show the user list for documents" msgstr "このドキュメントのユーザーリストを表示するかどうか" #: ../code/core/header.cpp:325 msgid "View Chat User List" msgstr "チャットユーザーリスト" #: ../code/core/header.cpp:326 msgid "Whether to show the user list for the chat" msgstr "チャットユーザーリストを表示するかどうか" #: ../code/core/header.cpp:330 msgid "_Highlight Mode" msgstr "強調表示モード(_H)" #: ../code/core/header.cpp:336 msgid "_Help" msgstr "ヘルプ(_H)" #: ../code/core/header.cpp:339 msgid "_Contents" msgstr "目次(_C)" #: ../code/core/header.cpp:340 msgid "Opens the Gobby manual" msgstr "Gobbyのマニュアルを開く" #: ../code/core/header.cpp:343 msgid "_About..." msgstr "Gobbyについて(_A)" #: ../code/core/header.cpp:344 msgid "Shows Gobby's copyright and credits" msgstr "Gobbyの著作権やクレジットの表示" #: ../code/core/iconmanager.cpp:49 msgid "User list" msgstr "ユーザーリスト" #: ../code/core/iconmanager.cpp:55 msgid "Document list" msgstr "ドキュメントリスト" #: ../code/core/iconmanager.cpp:61 ../code/window.cpp:52 msgid "Chat" msgstr "チャット" #: ../code/core/iconmanager.cpp:68 msgid "User Color Indicator" msgstr "ユーザーカラー表示" #: ../code/core/selfhoster.cpp:103 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:135 #, fuzzy msgid "Failed to generate Diffie-Hellman parameters" msgstr "ノード\"%1\"の削除に失敗" #: ../code/core/selfhoster.cpp:137 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:262 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:282 #, fuzzy msgid "Failed to share documents" msgstr "ドキュメント\"%1\"の保存に失敗しました" #: ../code/core/sessionuserview.cpp:39 msgid "User List" msgstr "ユーザーリスト" #: ../code/core/statusbar.cpp:418 msgid "Ln %1, Col %2\t%3" msgstr "%1行, %2列\t%3" #: ../code/core/statusbar.cpp:421 msgid "OVR" msgstr "上書" #: ../code/core/statusbar.cpp:421 msgid "INS" msgstr "挿入" #: ../code/core/textsessionview.cpp:638 msgid "Text written by %1" msgstr "%1によって書かれたテキスト" #: ../code/core/textsessionview.cpp:644 msgid "Unowned text" msgstr "所有していないテキスト" #: ../code/core/userlist.cpp:108 msgid "Users" msgstr "ユーザー" #: ../code/dialogs/connection-dialog.cpp:26 msgid "Connect to Server" msgstr "サーバーへ接続" #: ../code/dialogs/connection-dialog.cpp:30 msgid "Please enter a host name with which to establish a connection." msgstr "接続先のホスト名を入力してください" #: ../code/dialogs/connection-dialog.cpp:32 msgid "_Remote Endpoint:" msgstr "接続先(_R)" #: ../code/dialogs/document-location-dialog.cpp:28 msgid "Document Name:" msgstr "ドキュメント名:" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Select document's target location" msgstr "ドキュメントの対象場所を選択" #: ../code/dialogs/document-location-dialog.cpp:157 msgid "Choose a directory to create the document into:" msgstr "ドキュメントをいれるディレクトリ名:" #: ../code/dialogs/document-location-dialog.cpp:163 msgid "Select documents' target location" msgstr "ドキュメントの対象場所を選択" #: ../code/dialogs/document-location-dialog.cpp:165 msgid "Choose a directory to create the documents into:" msgstr "ドキュメントをいれるディレクトリ名:" #: ../code/dialogs/find-dialog.cpp:44 ../code/dialogs/find-dialog.cpp:142 msgid "Find" msgstr "検索" #: ../code/dialogs/find-dialog.cpp:47 msgid "_Search for:" msgstr "検索文字列(_S):" #: ../code/dialogs/find-dialog.cpp:49 msgid "Replace _with:" msgstr "置換先(_W)" #: ../code/dialogs/find-dialog.cpp:51 msgid "_Match case" msgstr "大文字小文字の区別(_M)" #: ../code/dialogs/find-dialog.cpp:52 msgid "Match _entire word only" msgstr "完全単語一致(_E)" #: ../code/dialogs/find-dialog.cpp:53 msgid "Search _backwards" msgstr "前へ検索(_B)" #: ../code/dialogs/find-dialog.cpp:54 msgid "Wra_p around" msgstr "行をはさむ(_P)" #: ../code/dialogs/find-dialog.cpp:100 msgid "Replace _All" msgstr "すべて置換(_A)" #: ../code/dialogs/find-dialog.cpp:102 msgid "_Replace" msgstr "置換(_R)" #: ../code/dialogs/find-dialog.cpp:142 msgid "Replace" msgstr "置換" #: ../code/dialogs/find-dialog.cpp:161 ../code/dialogs/find-dialog.cpp:177 msgid "Phrase \"%1\" has not been found" msgstr "フレーズ\"%1\"は発見されません" #: ../code/dialogs/find-dialog.cpp:335 msgid "No occurrence has been replaced" msgstr "置換されませんでした" #: ../code/dialogs/find-dialog.cpp:341 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "%1件置換されました" #: ../code/dialogs/goto-dialog.cpp:26 msgid "Go to line" msgstr "指定行へ移動" #: ../code/dialogs/goto-dialog.cpp:29 msgid "Line _number:" msgstr "行番号(_N):" #: ../code/dialogs/goto-dialog.cpp:50 msgid "Go To _Line" msgstr "指定行へ移動(_L)" #: ../code/dialogs/initial-dialog.cpp:76 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:99 #, fuzzy msgid "Failed to generate private key" msgstr "ノード\"%1\"の削除に失敗" #: ../code/dialogs/initial-dialog.cpp:102 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:141 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:144 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:198 msgid "Choose a user color" msgstr "ユーザーカラーの選択" #: ../code/dialogs/initial-dialog.cpp:204 msgid "Welcome to Gobby" msgstr "Gobbyへようそこ" #: ../code/dialogs/initial-dialog.cpp:216 msgid "" "Before we start, a few options need to be configured. You can later change " "them by choosing Edit ▸ Preferences from the menu." msgstr "" "開始する前に、いくつかのオプションを設定する必要があります。これらは後から" "「設定」メニューで変更できます。" #: ../code/dialogs/initial-dialog.cpp:224 msgid "User Name" msgstr "ユーザー名" #: ../code/dialogs/initial-dialog.cpp:226 msgid "Your name as shown to other users." msgstr "他のユーザーへ表示されるあなたの名前" #: ../code/dialogs/initial-dialog.cpp:235 msgid "User Color" msgstr "ユーザーカラー" #: ../code/dialogs/initial-dialog.cpp:237 msgid "The color with which text you have written is branded." msgstr "あなたが書いた文章につけられる色" #: ../code/dialogs/initial-dialog.cpp:256 #, fuzzy msgid "Remote Connections" msgstr "保護された接続" #: ../code/dialogs/initial-dialog.cpp:262 #: ../code/dialogs/preferences-dialog.cpp:217 msgid "Allow remote users to edit local documents" msgstr "" #: ../code/dialogs/initial-dialog.cpp:268 msgid "Ask remote users for a password" msgstr "" #: ../code/dialogs/initial-dialog.cpp:273 #: ../code/dialogs/preferences-dialog.cpp:220 #, fuzzy msgid "Password:" msgstr "サーバーパスワード(_P):" #: ../code/dialogs/initial-dialog.cpp:297 msgid "No authentication (Not recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:304 msgid "" "Don't authenticate ourselves to remote users. Data transfer will be " "unencrypted." msgstr "" #: ../code/dialogs/initial-dialog.cpp:313 msgid "Create a self-signed certificate (Recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:321 msgid "" "It may take a minute or two until remote users can connect while the " "security certificate is being generated." msgstr "" #: ../code/dialogs/initial-dialog.cpp:331 msgid "Use an existing certificate (Expert option)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:338 msgid "" "Use an existing private key and certificate for authentication. The files " "must be in PEM format." msgstr "" #: ../code/dialogs/initial-dialog.cpp:347 #: ../code/dialogs/preferences-dialog.cpp:766 msgid "Private key:" msgstr "" #: ../code/dialogs/initial-dialog.cpp:349 #: ../code/dialogs/preferences-dialog.cpp:772 msgid "Certificate:" msgstr "" #: ../code/dialogs/open-location-dialog.cpp:26 msgid "Open Location" msgstr "場所を開く" #: ../code/dialogs/open-location-dialog.cpp:27 msgid "Enter the _location (URI) of the file you would like to open:" msgstr "開きたいファイルがある場所(URI)(_L):" #: ../code/dialogs/password-dialog.cpp:25 msgid "Password Required" msgstr "パスワードが必要です" #: ../code/dialogs/password-dialog.cpp:31 msgid "Connection to host \"%1\" requires a password." msgstr "ホスト\"%1\"への接続にはパスワードが必要です。" #: ../code/dialogs/password-dialog.cpp:32 msgid "Invalid password for host \"%1\". Please try again." msgstr "ホスト\"%1\"のパスワードが違います。再試行してください。" #: ../code/dialogs/password-dialog.cpp:35 msgid "Server _Password:" msgstr "サーバーパスワード(_P):" #: ../code/dialogs/preferences-dialog.cpp:198 msgid "Settings" msgstr "設定" #: ../code/dialogs/preferences-dialog.cpp:199 #, fuzzy msgid "Remote Users" msgstr "ユーザーカラーをリセット" #: ../code/dialogs/preferences-dialog.cpp:200 #, fuzzy msgid "Local Documents" msgstr "新規ドキュメント" #: ../code/dialogs/preferences-dialog.cpp:202 msgid "User name:" msgstr "ユーザー名:" #: ../code/dialogs/preferences-dialog.cpp:204 msgid "User color:" msgstr "ユーザーカラー:" #: ../code/dialogs/preferences-dialog.cpp:206 msgid "Color intensity:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:208 msgid "Choose a new user color" msgstr "新しいユーザーカラーを選択してください" #: ../code/dialogs/preferences-dialog.cpp:209 msgid "Show cursors of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:210 msgid "Show selections of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:212 #, fuzzy msgid "Highlight current line of remote users" msgstr "現在の行をハイライトする" #: ../code/dialogs/preferences-dialog.cpp:214 msgid "Indicate cursor position of remote users in the scrollbar" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:219 msgid "Require remote users to enter a password" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:222 msgid "Port:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:226 msgid "Remember local documents after Gobby restart" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:227 #, fuzzy msgid "Local documents directory:" msgstr "ホストディレクトリ:" #: ../code/dialogs/preferences-dialog.cpp:423 msgid "Tab Stops" msgstr "タブストップ" #: ../code/dialogs/preferences-dialog.cpp:424 msgid "Indentation" msgstr "インデント" #: ../code/dialogs/preferences-dialog.cpp:425 msgid "Home/End Behavior" msgstr "Home/Endキーの挙動" #: ../code/dialogs/preferences-dialog.cpp:426 msgid "File Saving" msgstr "ファイルの保存" #: ../code/dialogs/preferences-dialog.cpp:427 msgid "_Tab width:" msgstr "タブ幅(_T):" #: ../code/dialogs/preferences-dialog.cpp:429 msgid "Insert _spaces instead of tabs" msgstr "タブ文字の代わりにスペースを挿入する(_I)" #: ../code/dialogs/preferences-dialog.cpp:430 msgid "Enable automatic _indentation" msgstr "オートインデントを有効にする(_I)" #: ../code/dialogs/preferences-dialog.cpp:431 msgid "Smart _home/end" msgstr "スマートhome/end(_H)" #: ../code/dialogs/preferences-dialog.cpp:432 msgid "Enable _automatic saving of documents" msgstr "ドキュメントの自動保存を有効にする(_A)" #: ../code/dialogs/preferences-dialog.cpp:434 msgid "Autosave interval in _minutes:" msgstr "自動保存間隔(分)(_M):" #: ../code/dialogs/preferences-dialog.cpp:455 msgid "" "With this option enabled, Home/End keys move to first/last character before " "going to the start/end of the line." msgstr "" "このオプションによって、Home/Endキーは行頭/行末にいく前に最初/最後の文字へ移" "動するようになります。" #: ../code/dialogs/preferences-dialog.cpp:525 msgid "Text Wrapping" msgstr "ワードラップ" #: ../code/dialogs/preferences-dialog.cpp:526 msgid "Line Numbers" msgstr "行番号" #: ../code/dialogs/preferences-dialog.cpp:527 msgid "Current Line" msgstr "現在行" #: ../code/dialogs/preferences-dialog.cpp:528 msgid "Right Margin" msgstr "右マージン" #: ../code/dialogs/preferences-dialog.cpp:529 msgid "Bracket Matching" msgstr "対応する括弧の表示" #: ../code/dialogs/preferences-dialog.cpp:530 msgid "Whitespace Display" msgstr "空白文字の表示" #: ../code/dialogs/preferences-dialog.cpp:531 msgid "Enable text wrapping" msgstr "ワードラップを有効にする" #: ../code/dialogs/preferences-dialog.cpp:532 msgid "Do not split words over two lines" msgstr "一単語を二行に分割しない" #: ../code/dialogs/preferences-dialog.cpp:533 msgid "Display line numbers" msgstr "行番号を表示する" #: ../code/dialogs/preferences-dialog.cpp:534 msgid "Highlight current line" msgstr "現在の行をハイライトする" #: ../code/dialogs/preferences-dialog.cpp:535 msgid "Display right margin" msgstr "右マージンの表示" #: ../code/dialogs/preferences-dialog.cpp:536 msgid "Right margin at column:" msgstr "右マージンの列数:" #: ../code/dialogs/preferences-dialog.cpp:537 msgid "Highlight matching bracket" msgstr "対応する括弧のハイライト" #: ../code/dialogs/preferences-dialog.cpp:589 msgid "Display no whitespace" msgstr "空白文字を表示しない" #: ../code/dialogs/preferences-dialog.cpp:592 msgid "Display spaces" msgstr "スペースの表示" #: ../code/dialogs/preferences-dialog.cpp:596 msgid "Display tabs" msgstr "タブ文字の表示" #: ../code/dialogs/preferences-dialog.cpp:600 msgid "Display tabs and spaces" msgstr "タブ文字とスペースの表示" #: ../code/dialogs/preferences-dialog.cpp:651 msgid "Toolbar" msgstr "ツールバー" #: ../code/dialogs/preferences-dialog.cpp:652 msgid "Font" msgstr "フォント" #: ../code/dialogs/preferences-dialog.cpp:653 msgid "Color Scheme" msgstr "カラースキーム" #: ../code/dialogs/preferences-dialog.cpp:661 msgid "Show text only" msgstr "テキストのみ表示" #: ../code/dialogs/preferences-dialog.cpp:663 msgid "Show icons only" msgstr "アイコンのみ表示" #: ../code/dialogs/preferences-dialog.cpp:665 msgid "Show both icons and text" msgstr "アイコンとテキストの表示" #: ../code/dialogs/preferences-dialog.cpp:667 msgid "Show text besides icons" msgstr "アイコンの隣にテキストを表示" #: ../code/dialogs/preferences-dialog.cpp:756 msgid "Trusted CAs" msgstr "信頼したCA" #: ../code/dialogs/preferences-dialog.cpp:757 msgid "Secure Connection" msgstr "保護された接続" #: ../code/dialogs/preferences-dialog.cpp:758 #, fuzzy msgid "Authentication" msgstr "インデント" #: ../code/dialogs/preferences-dialog.cpp:759 msgid "Select a file containing trusted CAs" msgstr "信頼されたCAを含むファイルの選択" #: ../code/dialogs/preferences-dialog.cpp:764 #, fuzzy msgid "None" msgstr "_None" #: ../code/dialogs/preferences-dialog.cpp:765 msgid "Use a certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:767 msgid "Select a private key file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:769 #: ../code/dialogs/preferences-dialog.cpp:776 #, fuzzy msgid "Create New..." msgstr "ドキュメントの作成(_C)" #: ../code/dialogs/preferences-dialog.cpp:773 msgid "Select a certificate file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:801 msgid "Use TLS if possible" msgstr "可能であればTLSを使用する" #: ../code/dialogs/preferences-dialog.cpp:804 msgid "Always use TLS" msgstr "常にTLSを使用する" #: ../code/dialogs/preferences-dialog.cpp:892 msgid "Error reading file:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:916 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:948 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:966 msgid "Select a location for the generated certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:1068 msgid "Preferences" msgstr "設定" #: ../code/dialogs/preferences-dialog.cpp:1073 msgid "User" msgstr "ユーザー" #: ../code/dialogs/preferences-dialog.cpp:1074 msgid "Editor" msgstr "エディタ" #: ../code/dialogs/preferences-dialog.cpp:1075 msgid "View" msgstr "表示" #: ../code/dialogs/preferences-dialog.cpp:1076 msgid "Appearance" msgstr "外観" #: ../code/dialogs/preferences-dialog.cpp:1077 msgid "Security" msgstr "セキュリティ" #: ../code/main.cpp:194 msgid "Gobby options" msgstr "Gobbyオプション" #: ../code/main.cpp:194 msgid "Options related to Gobby" msgstr "Gobbyに関連したオプション" #: ../code/main.cpp:199 msgid "Display version information and exit" msgstr "バージョン情報を表示して終了" #: ../code/main.cpp:206 msgid "Also start a new Gobby instance when there is one running already" msgstr "Gobbyが既にひとつ起動していても新しいインスタンスを起動する" #: ../code/main.cpp:214 msgid "Connect to given host on startup, can be given multiple times" msgstr "起動時に与えられたホストへ接続します。複数回指定できます。" #: ../code/main.cpp:215 msgid "HOSTNAME" msgstr "HOSTNAME" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "ノード\"%1\"を削除..." #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "ノード\"%1\"の削除に失敗" #: ../code/operations/operation-export-html.cpp:168 #, c-format msgid "written by: %s" msgstr "%sによって書かれた" #: ../code/operations/operation-export-html.cpp:241 msgid "" msgstr "<日付を表示できません>" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:254 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "ドキュメントは%3$sの%1$s:%2$sから%4$sによって生成された" #: ../code/operations/operation-export-html.cpp:395 msgid "Participants" msgstr "参加者" #: ../code/operations/operation-export-html.cpp:475 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "\"%1\"を\"%2\"へHTMLでエクスポート..." #: ../code/operations/operation-export-html.cpp:536 msgid "Failed to export document \"%1\" to HTML" msgstr "\"%1\"のHTMLでのエクスポートに失敗しました" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "ディレクトリ\"%1\"の作成..." #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "ドキュメント\"%1\"の作成" #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "ディレクトリ\"%1\"の作成に失敗しました" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "ドキュメント\"%1\"の作成に失敗しました" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "ISO-8859-1" #: ../code/operations/operation-open.cpp:114 msgid "Opening document \"%1\"..." msgstr "ドキュメント\"%1\"を開く..." #: ../code/operations/operation-open.cpp:134 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "新しいドキュメントを挿入しようとしたディレクトリは削除されています" #: ../code/operations/operation-open.cpp:323 msgid "The file contains data not in the specified encoding" msgstr "入力されたエンコーディングでないデータがファイルに含まれています" #: ../code/operations/operation-open.cpp:334 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "未知のエンコーディングか、バイナリデータがファイルに含まれています" #: ../code/operations/operation-open-multiple.cpp:91 msgid "Parent folder was removed" msgstr "親フォルダは削除されました" #: ../code/operations/operation-open-multiple.cpp:193 msgid "Failed to open multiple documents" msgstr "複数のファイルを開くのに失敗" #: ../code/operations/operation-save.cpp:97 msgid "Saving document \"%1\" to \"%2\"..." msgstr "\"%1\"を\"%2\"へ保存..." #: ../code/operations/operation-save.cpp:226 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" "指定された文字エンコーディングでエンコードできない文字がドキュメントに含まれ" "ています" #: ../code/operations/operation-save.cpp:287 msgid "Failed to save document \"%1\"" msgstr "ドキュメント\"%1\"の保存に失敗しました" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "\"%1\"を開くのに失敗しました" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 #, fuzzy msgid "Subscribing to \"%1\"..." msgstr "%1へ加入..." #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "ディレクトリ\"%1\"の作成に失敗しました" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "\"%1\"への接続が失敗しました" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 #, fuzzy msgid "Could not subscribe to \"%1\"" msgstr "\"%1\"の解決に失敗しました" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "デバイス\"%1\"は存在しません" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "ディレクトリ\"%1\"を作成できませんでした: %2" #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "デバイス\"%1\"は存在しません" #: ../code/window.cpp:104 msgid "This Computer" msgstr "" #: ../code/window.cpp:129 msgid "Document Browser" msgstr "ドキュメントブラウザ" #: ../code/window.cpp:182 msgid "You are still connected to a session" msgstr "まだセッションに接続されています" #: ../code/window.cpp:190 msgid "Do you want to close Gobby nevertheless?" msgstr "それでもGobbyを閉じてもいいですか?" #: ../code/window.cpp:196 msgid "C_ancel" msgstr "キャンセル(_C)" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "Gobby" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "共同作業テキストエディタ" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "Gobby Collaborative Editor (0.5)" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "テキストを共同作業で編集する" #~ msgid "" #~ "This program is free software; you can redistribute it and/or modify it " #~ "under the terms of the GNU General Public License as published by the " #~ "Free Software Foundation; either version 2 of the License, or (at your " #~ "option) any later version.\n" #~ "\n" #~ "This program is distributed in the hope that it will be useful, but " #~ "WITHOUT ANY WARRANTY; without even the implied warranty of " #~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General " #~ "Public License for more details.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgstr "" #~ "This program is free software; you can redistribute it and/or modify it " #~ "under the terms of the GNU General Public License as published by the " #~ "Free Software Foundation; either version 2 of the License, or (at your " #~ "option) any later version.\n" #~ "\n" #~ "This program is distributed in the hope that it will be useful, but " #~ "WITHOUT ANY WARRANTY; without even the implied warranty of " #~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General " #~ "Public License for more details.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgid "User Join in progress..." #~ msgstr "ユーザーの参加処理を行っています..." #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "\"%1\"の解決に失敗しました" #~ msgid "Resolving \"%1\"..." #~ msgstr "\"%1\"を解決しています..." #~ msgid "Paths" #~ msgstr "パス" #~ msgid "" #~ "The directory into which locally hosted sessions are permanently stored" #~ msgstr "ローカルでホストされたセッションが恒久的に記憶されるディレクトリ" gobby-0.5.0/po/ChangeLog0000644000175000017500000000432712364474462011751 000000000000002011-12-01 Wei-Lun Chao * zh_TW.po: Add traditional Chinese translation. * LINGUAS: Add zh_TW. 2010-11-18 Takahiro Sunaga * ja.po: Add Japanese translation. * LINGUAS: Add ja. 2010-11-16 Claude Paroz * fr.po: Add French translation. * LINGUAS: Add fr. 2010-06-20 Armin Burgmeier * en_GB.po: * de.po: Brought up to date. 2010-06-20 Γιάννης Κασκαμανίδης * LINGUAS: Added el_GR. * el_GR.po: Added greek translation. 2010-02-26 Armin Burgmeier * de.po: Choose v as mnemonic for "Direktverbindung" as d is already in use by "_Datei" in the menu bar. 2010-02-14 Benjamin Herr * en_GB.po: * de.po: Brought up to date 2010-02-14 Armin Burgmeier , Benjamin Herr , Michael Frey * de.po: Added german translation. * LINGUAS: Added de. 2009-12-19 Armin Burgmeier * gobby05.pot: Added .pot file, to allow synchronization with launchpad. * Makefile.in.in: Include gobby05.pot in distribution tarball. 2009-12-19 Armin Burgmeier * en_GB.po: Update. 2009-12-16 Armin Burgmeier * POTFILES.in: Updated. 2009-12-03 Gabríel A. Pétursson * LINGUAS: * en_GB.po: Added British English translation. 2009-11-15 Armin Burgmeier * POTFILES.in: Updated. * LINGUAS: Removed all languages. * *.po: Removed as these were just remains from Gobby 0.4.x which contained only very few strings that are still valid, and a lot of invalid fuzzy matches. 2009-08-29 Armin Burgmeier * POTFILES.in: Updated. 2009-04-24 Armin Burgmeier * POTFILES.in: Updated. 2008-11-23 Armin Burgmeier * POTFILES.in: Added contrib/gobby-0.5.desktop.in. * gobby05.pot: Regenerated. * *.po: Updated for the new strings. 2008-10-16 Armin Burgmeier * POTFILES.in: * gobby.pot: Updated for 0.4.90 release. 2008-09-19 Armin Burgmeier * POTFILES.in: Regenerated. * gobby.pot: * *.po: Updated to the strings of 0.4.90. gobby-0.5.0/po/fr.po0000644000175000017500000011546612376151303011142 00000000000000# French translation of Gobby. # Copyright (C) 2010, Listed translators # This file is distributed under the same license as the Gobby package. # Claude Paroz , 2010 # msgid "" msgstr "" "Project-Id-Version: Gobby 0.5 fr\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-08-23 13:43-0400\n" "PO-Revision-Date: 2010-11-16 23:04+0100\n" "Last-Translator: Claude Paroz \n" "Language-Team: French \n" "Language: French\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../code/commands/auth-commands.cpp:196 #, fuzzy msgid "Password required" msgstr "Mot de passe nécessaire" #: ../code/commands/auth-commands.cpp:214 msgid "Incorrect password" msgstr "" #: ../code/commands/browser-commands.cpp:288 msgid "Subscribing to %1..." msgstr "Inscription à %1..." #: ../code/commands/browser-commands.cpp:301 msgid "Subscribing to chat on %1..." msgstr "Inscription à la discussion sur %1..." #: ../code/commands/browser-commands.cpp:591 msgid "Subscription failed" msgstr "Échec de l'inscription" #: ../code/commands/browser-context-commands.cpp:86 msgid "Could not find a location where to store the certificate" msgstr "" #: ../code/commands/browser-context-commands.cpp:153 msgid "_Remove" msgstr "" #: ../code/commands/browser-context-commands.cpp:188 #, fuzzy msgid "_Disconnect from Server" msgstr "Connexion à un serveur" #: ../code/commands/browser-context-commands.cpp:220 #, fuzzy msgid "Create _Account..." msgstr "Créer un do_cument..." #: ../code/commands/browser-context-commands.cpp:245 msgid "Create Do_cument..." msgstr "Créer un do_cument..." #: ../code/commands/browser-context-commands.cpp:280 #, fuzzy msgid "Create Di_rectory..." msgstr "Créer un dossier..." #: ../code/commands/browser-context-commands.cpp:293 msgid "_Open Document..." msgstr "_Ouvrir un document..." #: ../code/commands/browser-context-commands.cpp:312 msgid "_Permissions..." msgstr "" #: ../code/commands/browser-context-commands.cpp:324 msgid "D_elete" msgstr "_Supprimer" #: ../code/commands/browser-context-commands.cpp:405 msgid "Choose a name for the directory" msgstr "Choisissez un nom pour le dossier" #: ../code/commands/browser-context-commands.cpp:406 msgid "Choose a name for the document" msgstr "Choisissez un nom pour le document" #: ../code/commands/browser-context-commands.cpp:407 msgid "_Directory Name:" msgstr "Nom du _dossier :" #: ../code/commands/browser-context-commands.cpp:408 msgid "_Document Name:" msgstr "Nom du _document :" #: ../code/commands/browser-context-commands.cpp:411 msgid "C_reate" msgstr "C_réer" #: ../code/commands/browser-context-commands.cpp:415 msgid "New Directory" msgstr "Nouveau dossier" #: ../code/commands/browser-context-commands.cpp:416 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "Nouveau document" #: ../code/commands/browser-context-commands.cpp:436 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "Choisissez un fichier texte à ouvrir" #: ../code/commands/browser-context-commands.cpp:558 #: ../code/commands/browser-context-commands.cpp:569 msgid "Account successfully created" msgstr "" #: ../code/commands/browser-context-commands.cpp:562 msgid "When re-connecting to the server, the new account will be used." msgstr "" #: ../code/commands/browser-context-commands.cpp:573 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:586 #, fuzzy msgid "Failed to create account" msgstr "Impossible de créer le document « %1 »" #: ../code/commands/browser-context-commands.cpp:589 msgid "Could not save the certificate for the account: %1" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "Choisissez un emplacement pour y exporter le document « %1 »" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "Requête vers « %1 »..." #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:474 #: ../code/operations/operation-open-multiple.cpp:180 msgid "Failed to open document \"%1\"" msgstr "Le document « %1 » n'a pas pu être ouvert" #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "Choisissez un emplacement pour y enregistrer le document « %1 »" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:70 msgid "There was an error displaying help." msgstr "Une erreur est survenue durant l'affichage de l'aide" #: ../code/commands/help-commands.cpp:93 msgid "Contributors:" msgstr "Contributeurs :" #: ../code/commands/help-commands.cpp:99 msgid "British English:" msgstr "Anglais britannique :" #: ../code/commands/help-commands.cpp:101 msgid "German:" msgstr "Allemand :" #: ../code/commands/help-commands.cpp:118 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" "La connexion à l'éditeur de ce document a été interrompue. De nouvelles " "modifications au document ne pourraient plus être partagées avec les autres, " "c'est pourquoi le document ne peut plus être modifié.\n" "\n" "Sachez également qu'il n'est pas certain que vos dernières modifications " "aient pu être transmises à l'éditeur avant la perte de la connexion." #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "Synchronisation en cours... %1 %%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "Ce document est inutilisable." #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" "Si vous avez une idée sur la cause de ce problème, vous pouvez tenter de le " "résoudre puis essayer à nouveau (après avoir fermé ce document). Sinon, " "c'est probablement une anomalie du logiciel. Dans ce cas, veuillez signaler " "cette erreur dans un rapport sur http://gobby.0x539.de/trac/newticket et " "indiquer le maximum d'informations, y compris ce que vous faisiez lorsque le " "problème est survenu et comment il est possible de le reproduire (le cas " "échéant), afin que nous puissions corriger cette erreur dans une prochaine " "version. Merci." #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "Échec de synchronisation : %1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" "Vous pouvez encore voir les modifications des autres personnes, mais vous ne " "pouvez plus modifier ce document vous-même." #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "Échec de l'adhésion d'un utilisateur : %1" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:111 msgid "_Direct Connection" msgstr "Connexion _directe" #: ../code/core/browser.cpp:113 msgid "Host Name:" msgstr "Nom d'hôte :" #: ../code/core/certificatemanager.cpp:83 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:276 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:338 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:414 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/foldermanager.cpp:322 msgid "The document has been removed from the server." msgstr "" #: ../code/core/header.cpp:203 msgid "_None" msgstr "_Aucun" #: ../code/core/header.cpp:227 msgid "_File" msgstr "_Fichier" #: ../code/core/header.cpp:230 msgid "_Open..." msgstr "_Ouvrir..." #: ../code/core/header.cpp:233 msgid "Open _Location..." msgstr "Ouvrir un _emplacement..." #: ../code/core/header.cpp:237 msgid "Save _As..." msgstr "Enregistrer _sous..." #: ../code/core/header.cpp:241 ../code/core/iconmanager.cpp:43 msgid "Save All" msgstr "Tout enregistrer" #: ../code/core/header.cpp:241 msgid "Save all open files locally" msgstr "Enregistrer localement tous les fichiers ouverts" #: ../code/core/header.cpp:243 msgid "Export As _HTML..." msgstr "Exporter en _HTML..." #: ../code/core/header.cpp:246 msgid "Connect _to Server..." msgstr "Se _connecter à un serveur..." #: ../code/core/header.cpp:251 msgid "_Edit" msgstr "É_dition" #: ../code/core/header.cpp:259 msgid "_Find..." msgstr "_Rechercher..." #: ../code/core/header.cpp:261 msgid "Find Ne_xt" msgstr "Rechercher le _suivant" #: ../code/core/header.cpp:262 msgid "Find next match of phrase searched for" msgstr "Rechercher la prochaine occurrence du texte recherché" #: ../code/core/header.cpp:265 msgid "Find Pre_vious" msgstr "Rechercher le _précédent" #: ../code/core/header.cpp:266 msgid "Find previous match of phrase searched for" msgstr "Rechercher la précédente occurrence du texte recherché" #: ../code/core/header.cpp:271 msgid "Find and Rep_lace..." msgstr "Rechercher et re_mplacer..." #: ../code/core/header.cpp:275 msgid "Go to _Line..." msgstr "Aller à la _ligne..." #: ../code/core/header.cpp:279 msgid "Pr_eferences..." msgstr "_Préférences..." #: ../code/core/header.cpp:281 msgid "_View" msgstr "_Affichage" #: ../code/core/header.cpp:284 msgid "Reset User Colors" msgstr "Réinitialiser les couleurs des utilisateurs" #: ../code/core/header.cpp:285 msgid "Hide user colors in current document" msgstr "Masquer les couleurs des utilisateurs dans le document actuel" #: ../code/core/header.cpp:289 msgid "Fullscreen" msgstr "" #: ../code/core/header.cpp:290 msgid "Show the editing window in fullscreen mode" msgstr "" #: ../code/core/header.cpp:294 msgid "Zoom In" msgstr "" #: ../code/core/header.cpp:297 msgid "Zoom Out" msgstr "" #: ../code/core/header.cpp:300 msgid "View Toolbar" msgstr "Afficher la barre d'outils" #: ../code/core/header.cpp:301 msgid "Whether to show the toolbar" msgstr "Indique s'il faut afficher la barre d'outils" #: ../code/core/header.cpp:305 msgid "View Statusbar" msgstr "Afficher la barre d'état" #: ../code/core/header.cpp:306 msgid "Whether to show the statusbar" msgstr "Indique s'il faut afficher la barre d'état" #: ../code/core/header.cpp:310 msgid "View Document Browser" msgstr "Afficher le navigateur de document" #: ../code/core/header.cpp:311 msgid "Whether to show the document browser" msgstr "Indique s'il faut afficher le navigateur de document" #: ../code/core/header.cpp:315 msgid "View Chat" msgstr "Afficher la discussion" #: ../code/core/header.cpp:316 msgid "Whether to show the chat pane" msgstr "Indique s'il faut afficher le volet de discussion" #: ../code/core/header.cpp:320 msgid "View Document User List" msgstr "Afficher la liste des utilisateurs du document" #: ../code/core/header.cpp:321 msgid "Whether to show the user list for documents" msgstr "Indique s'il faut afficher la liste des utilisateurs du document" #: ../code/core/header.cpp:325 msgid "View Chat User List" msgstr "Afficher la liste des utilisateurs de la discussion" #: ../code/core/header.cpp:326 msgid "Whether to show the user list for the chat" msgstr "Indique s'il faut afficher la liste des utilisateurs de la discussion" #: ../code/core/header.cpp:330 msgid "_Highlight Mode" msgstr "_Mode de coloration" #: ../code/core/header.cpp:336 msgid "_Help" msgstr "Aid_e" #: ../code/core/header.cpp:339 msgid "_Contents" msgstr "_Sommaire" #: ../code/core/header.cpp:340 msgid "Opens the Gobby manual" msgstr "Ouvre le manuel de Gobby" #: ../code/core/header.cpp:343 msgid "_About..." msgstr "À _propos..." #: ../code/core/header.cpp:344 msgid "Shows Gobby's copyright and credits" msgstr "Affiche le copyright et les remerciements de Gobby" #: ../code/core/iconmanager.cpp:49 msgid "User list" msgstr "Liste des utilisateurs" #: ../code/core/iconmanager.cpp:55 msgid "Document list" msgstr "Liste des documents" #: ../code/core/iconmanager.cpp:61 ../code/window.cpp:52 msgid "Chat" msgstr "Discussion" #: ../code/core/iconmanager.cpp:68 msgid "User Color Indicator" msgstr "Indicateur des couleurs des utilisateurs" #: ../code/core/selfhoster.cpp:103 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:135 #, fuzzy msgid "Failed to generate Diffie-Hellman parameters" msgstr "Échec de suppression du nœud « %1 »" #: ../code/core/selfhoster.cpp:137 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:262 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:282 #, fuzzy msgid "Failed to share documents" msgstr "L'enregistrement du document « %1 » a échoué" #: ../code/core/sessionuserview.cpp:39 msgid "User List" msgstr "Liste des utilisateurs" #: ../code/core/statusbar.cpp:418 msgid "Ln %1, Col %2\t%3" msgstr "Lig %1, col %2\t%3" #: ../code/core/statusbar.cpp:421 msgid "OVR" msgstr "ÉCR" #: ../code/core/statusbar.cpp:421 msgid "INS" msgstr "INS" #: ../code/core/textsessionview.cpp:638 msgid "Text written by %1" msgstr "Texte écrit par %1" #: ../code/core/textsessionview.cpp:644 msgid "Unowned text" msgstr "Texte anonyme" #: ../code/core/userlist.cpp:108 msgid "Users" msgstr "Utilisateurs" #: ../code/dialogs/connection-dialog.cpp:26 msgid "Connect to Server" msgstr "Connexion à un serveur" #: ../code/dialogs/connection-dialog.cpp:30 msgid "Please enter a host name with which to establish a connection." msgstr "Veuillez indiquer un nom d'hôte pour établir la connexion." #: ../code/dialogs/connection-dialog.cpp:32 msgid "_Remote Endpoint:" msgstr "Point d'_accès distant :" #: ../code/dialogs/document-location-dialog.cpp:28 msgid "Document Name:" msgstr "Nom du document :" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Select document's target location" msgstr "Sélectionnez l'emplacement cible du document" #: ../code/dialogs/document-location-dialog.cpp:157 msgid "Choose a directory to create the document into:" msgstr "Choisissez un dossier dans lequel créer le document :" #: ../code/dialogs/document-location-dialog.cpp:163 msgid "Select documents' target location" msgstr "Sélectionnez l'emplacement cible du document" #: ../code/dialogs/document-location-dialog.cpp:165 msgid "Choose a directory to create the documents into:" msgstr "Choisissez un dossier dans lequel créer les documents :" #: ../code/dialogs/find-dialog.cpp:44 ../code/dialogs/find-dialog.cpp:142 msgid "Find" msgstr "Rechercher" #: ../code/dialogs/find-dialog.cpp:47 msgid "_Search for:" msgstr "_Rechercher :" #: ../code/dialogs/find-dialog.cpp:49 msgid "Replace _with:" msgstr "Rem_placer par :" #: ../code/dialogs/find-dialog.cpp:51 msgid "_Match case" msgstr "Re_specter la casse" #: ../code/dialogs/find-dialog.cpp:52 msgid "Match _entire word only" msgstr "_Mots entiers seulement" #: ../code/dialogs/find-dialog.cpp:53 msgid "Search _backwards" msgstr "Rechercher en _arrière" #: ../code/dialogs/find-dialog.cpp:54 msgid "Wra_p around" msgstr "Recherche _circulaire" #: ../code/dialogs/find-dialog.cpp:100 msgid "Replace _All" msgstr "_Tout remplacer" #: ../code/dialogs/find-dialog.cpp:102 msgid "_Replace" msgstr "R_emplacer" #: ../code/dialogs/find-dialog.cpp:142 msgid "Replace" msgstr "Remplacer" #: ../code/dialogs/find-dialog.cpp:161 ../code/dialogs/find-dialog.cpp:177 msgid "Phrase \"%1\" has not been found" msgstr "Le texte « %1 » n'a pas été trouvé" #: ../code/dialogs/find-dialog.cpp:335 msgid "No occurrence has been replaced" msgstr "Aucune occurrence n'a été remplacée" #: ../code/dialogs/find-dialog.cpp:341 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "%1 occurrence a été remplacée" msgstr[1] "%1 occurrences ont été remplacées" #: ../code/dialogs/goto-dialog.cpp:26 msgid "Go to line" msgstr "Aller à la ligne" #: ../code/dialogs/goto-dialog.cpp:29 msgid "Line _number:" msgstr "_Numéro de ligne :" #: ../code/dialogs/goto-dialog.cpp:50 msgid "Go To _Line" msgstr "Aller à la _ligne" #: ../code/dialogs/initial-dialog.cpp:76 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:99 #, fuzzy msgid "Failed to generate private key" msgstr "Échec de suppression du nœud « %1 »" #: ../code/dialogs/initial-dialog.cpp:102 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:141 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:144 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:198 msgid "Choose a user color" msgstr "Choisissez une couleur d'utilisateur" #: ../code/dialogs/initial-dialog.cpp:204 msgid "Welcome to Gobby" msgstr "Bienvenue dans Gobby" #: ../code/dialogs/initial-dialog.cpp:216 msgid "" "Before we start, a few options need to be configured. You can later change " "them by choosing Edit ▸ Preferences from the menu." msgstr "" "Avant de commencer, quelques options doivent être configurées. Il est " "possible de les modifier ultérieurement en choisissant Édition ▸ Préférences " "dans le menu." #: ../code/dialogs/initial-dialog.cpp:224 msgid "User Name" msgstr "Nom d'utilisateur" #: ../code/dialogs/initial-dialog.cpp:226 msgid "Your name as shown to other users." msgstr "Votre nom tel qu'il apparaîtra pour les autres personnes." #: ../code/dialogs/initial-dialog.cpp:235 msgid "User Color" msgstr "Couleur d'utilisateur" #: ../code/dialogs/initial-dialog.cpp:237 msgid "The color with which text you have written is branded." msgstr "La couleur qui marquera le texte que vous écrivez." #: ../code/dialogs/initial-dialog.cpp:256 #, fuzzy msgid "Remote Connections" msgstr "Connexion sécurisée" #: ../code/dialogs/initial-dialog.cpp:262 #: ../code/dialogs/preferences-dialog.cpp:217 msgid "Allow remote users to edit local documents" msgstr "" #: ../code/dialogs/initial-dialog.cpp:268 msgid "Ask remote users for a password" msgstr "" #: ../code/dialogs/initial-dialog.cpp:273 #: ../code/dialogs/preferences-dialog.cpp:220 #, fuzzy msgid "Password:" msgstr "_Mot de passe du serveur :" #: ../code/dialogs/initial-dialog.cpp:297 msgid "No authentication (Not recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:304 msgid "" "Don't authenticate ourselves to remote users. Data transfer will be " "unencrypted." msgstr "" #: ../code/dialogs/initial-dialog.cpp:313 msgid "Create a self-signed certificate (Recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:321 msgid "" "It may take a minute or two until remote users can connect while the " "security certificate is being generated." msgstr "" #: ../code/dialogs/initial-dialog.cpp:331 msgid "Use an existing certificate (Expert option)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:338 msgid "" "Use an existing private key and certificate for authentication. The files " "must be in PEM format." msgstr "" #: ../code/dialogs/initial-dialog.cpp:347 #: ../code/dialogs/preferences-dialog.cpp:766 msgid "Private key:" msgstr "" #: ../code/dialogs/initial-dialog.cpp:349 #: ../code/dialogs/preferences-dialog.cpp:772 msgid "Certificate:" msgstr "" #: ../code/dialogs/open-location-dialog.cpp:26 msgid "Open Location" msgstr "Ouvrir un emplacement" #: ../code/dialogs/open-location-dialog.cpp:27 msgid "Enter the _location (URI) of the file you would like to open:" msgstr "Saisissez l'_emplacement (URI) du fichier que vous souhaitez ouvrir :" #: ../code/dialogs/password-dialog.cpp:25 msgid "Password Required" msgstr "Mot de passe nécessaire" #: ../code/dialogs/password-dialog.cpp:31 msgid "Connection to host \"%1\" requires a password." msgstr "La connexion au serveur « %1 » exige un mot de passe." #: ../code/dialogs/password-dialog.cpp:32 msgid "Invalid password for host \"%1\". Please try again." msgstr "" "Le mot de passe pour le serveur « %1 » n'est pas valable. Essayez encore une " "fois." #: ../code/dialogs/password-dialog.cpp:35 msgid "Server _Password:" msgstr "_Mot de passe du serveur :" #: ../code/dialogs/preferences-dialog.cpp:198 msgid "Settings" msgstr "Paramètres" #: ../code/dialogs/preferences-dialog.cpp:199 #, fuzzy msgid "Remote Users" msgstr "Réinitialiser les couleurs des utilisateurs" #: ../code/dialogs/preferences-dialog.cpp:200 #, fuzzy msgid "Local Documents" msgstr "Nouveau document" #: ../code/dialogs/preferences-dialog.cpp:202 msgid "User name:" msgstr "Nom d'utilisateur :" #: ../code/dialogs/preferences-dialog.cpp:204 msgid "User color:" msgstr "Couleur d'utilisateur :" #: ../code/dialogs/preferences-dialog.cpp:206 msgid "Color intensity:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:208 msgid "Choose a new user color" msgstr "Choisissez une nouvelle couleur d'utilisateur" #: ../code/dialogs/preferences-dialog.cpp:209 msgid "Show cursors of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:210 msgid "Show selections of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:212 #, fuzzy msgid "Highlight current line of remote users" msgstr "Surligner la ligne actuelle" #: ../code/dialogs/preferences-dialog.cpp:214 msgid "Indicate cursor position of remote users in the scrollbar" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:219 msgid "Require remote users to enter a password" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:222 msgid "Port:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:226 msgid "Remember local documents after Gobby restart" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:227 #, fuzzy msgid "Local documents directory:" msgstr "Dossier de l'hôte :" #: ../code/dialogs/preferences-dialog.cpp:423 msgid "Tab Stops" msgstr "Tabulations" #: ../code/dialogs/preferences-dialog.cpp:424 msgid "Indentation" msgstr "Indentation" #: ../code/dialogs/preferences-dialog.cpp:425 msgid "Home/End Behavior" msgstr "Comportement de Origine/Fin" #: ../code/dialogs/preferences-dialog.cpp:426 msgid "File Saving" msgstr "Enregistrement de fichiers" #: ../code/dialogs/preferences-dialog.cpp:427 msgid "_Tab width:" msgstr "_Largeur des tabulations :" #: ../code/dialogs/preferences-dialog.cpp:429 msgid "Insert _spaces instead of tabs" msgstr "Insérer des _espaces au lieu de tabulations" #: ../code/dialogs/preferences-dialog.cpp:430 msgid "Enable automatic _indentation" msgstr "Activer l'_indentation automatique" #: ../code/dialogs/preferences-dialog.cpp:431 msgid "Smart _home/end" msgstr "_Origine/fin intelligents" #: ../code/dialogs/preferences-dialog.cpp:432 msgid "Enable _automatic saving of documents" msgstr "_Activer l'enregistrement automatique des documents" #: ../code/dialogs/preferences-dialog.cpp:434 msgid "Autosave interval in _minutes:" msgstr "Intervalle d'enregistrement en _minutes :" #: ../code/dialogs/preferences-dialog.cpp:455 msgid "" "With this option enabled, Home/End keys move to first/last character before " "going to the start/end of the line." msgstr "" "Quand cette option est activée, les touches Origine/Fin se placent au " "premier/dernier caractère avant d'aller au début/à la fin de la ligne." #: ../code/dialogs/preferences-dialog.cpp:525 msgid "Text Wrapping" msgstr "Longues lignes" #: ../code/dialogs/preferences-dialog.cpp:526 msgid "Line Numbers" msgstr "Numéros de ligne" #: ../code/dialogs/preferences-dialog.cpp:527 msgid "Current Line" msgstr "Ligne actuelle" #: ../code/dialogs/preferences-dialog.cpp:528 msgid "Right Margin" msgstr "Marge de droite" #: ../code/dialogs/preferences-dialog.cpp:529 msgid "Bracket Matching" msgstr "Correspondance des parenthèses" #: ../code/dialogs/preferences-dialog.cpp:530 msgid "Whitespace Display" msgstr "Affichage des blancs" #: ../code/dialogs/preferences-dialog.cpp:531 msgid "Enable text wrapping" msgstr "Activer le retour à la ligne" #: ../code/dialogs/preferences-dialog.cpp:532 msgid "Do not split words over two lines" msgstr "Ne pas couper les mots sur deux lignes" #: ../code/dialogs/preferences-dialog.cpp:533 msgid "Display line numbers" msgstr "Afficher les numéros de ligne" #: ../code/dialogs/preferences-dialog.cpp:534 msgid "Highlight current line" msgstr "Surligner la ligne actuelle" #: ../code/dialogs/preferences-dialog.cpp:535 msgid "Display right margin" msgstr "Afficher la marge de droite" #: ../code/dialogs/preferences-dialog.cpp:536 msgid "Right margin at column:" msgstr "Marge de droite à la colonne :" #: ../code/dialogs/preferences-dialog.cpp:537 msgid "Highlight matching bracket" msgstr "Surligner les parenthèses correspondantes" #: ../code/dialogs/preferences-dialog.cpp:589 msgid "Display no whitespace" msgstr "N'afficher aucun type d'espace" #: ../code/dialogs/preferences-dialog.cpp:592 msgid "Display spaces" msgstr "Afficher les espaces" #: ../code/dialogs/preferences-dialog.cpp:596 msgid "Display tabs" msgstr "Afficher les tabulations" #: ../code/dialogs/preferences-dialog.cpp:600 msgid "Display tabs and spaces" msgstr "Afficher les tabulations et les espaces" #: ../code/dialogs/preferences-dialog.cpp:651 msgid "Toolbar" msgstr "Barre d'outils" #: ../code/dialogs/preferences-dialog.cpp:652 msgid "Font" msgstr "Police" #: ../code/dialogs/preferences-dialog.cpp:653 msgid "Color Scheme" msgstr "Jeu de couleurs" #: ../code/dialogs/preferences-dialog.cpp:661 msgid "Show text only" msgstr "Afficher uniquement le texte" #: ../code/dialogs/preferences-dialog.cpp:663 msgid "Show icons only" msgstr "Afficher unqiuement les icônes" #: ../code/dialogs/preferences-dialog.cpp:665 msgid "Show both icons and text" msgstr "Afficher les icônes et le texte" #: ../code/dialogs/preferences-dialog.cpp:667 msgid "Show text besides icons" msgstr "Afficher le texte à côté des icônes" #: ../code/dialogs/preferences-dialog.cpp:756 msgid "Trusted CAs" msgstr "Autorités de confiance" #: ../code/dialogs/preferences-dialog.cpp:757 msgid "Secure Connection" msgstr "Connexion sécurisée" #: ../code/dialogs/preferences-dialog.cpp:758 #, fuzzy msgid "Authentication" msgstr "Indentation" #: ../code/dialogs/preferences-dialog.cpp:759 msgid "Select a file containing trusted CAs" msgstr "" "Choisissez un fichier contenant les autorités de certification de confiance" #: ../code/dialogs/preferences-dialog.cpp:764 #, fuzzy msgid "None" msgstr "_Aucun" #: ../code/dialogs/preferences-dialog.cpp:765 msgid "Use a certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:767 msgid "Select a private key file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:769 #: ../code/dialogs/preferences-dialog.cpp:776 #, fuzzy msgid "Create New..." msgstr "Créer un do_cument..." #: ../code/dialogs/preferences-dialog.cpp:773 msgid "Select a certificate file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:801 msgid "Use TLS if possible" msgstr "Utiliser TSL si possible" #: ../code/dialogs/preferences-dialog.cpp:804 msgid "Always use TLS" msgstr "Toujours utiliser TLS" #: ../code/dialogs/preferences-dialog.cpp:892 msgid "Error reading file:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:916 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:948 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:966 msgid "Select a location for the generated certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:1068 msgid "Preferences" msgstr "Préférences" #: ../code/dialogs/preferences-dialog.cpp:1073 msgid "User" msgstr "Utilisateur" #: ../code/dialogs/preferences-dialog.cpp:1074 msgid "Editor" msgstr "Éditeur" #: ../code/dialogs/preferences-dialog.cpp:1075 msgid "View" msgstr "Affichage" #: ../code/dialogs/preferences-dialog.cpp:1076 msgid "Appearance" msgstr "Apparence" #: ../code/dialogs/preferences-dialog.cpp:1077 msgid "Security" msgstr "Sécurité" #: ../code/main.cpp:194 msgid "Gobby options" msgstr "Options de Gobby" #: ../code/main.cpp:194 msgid "Options related to Gobby" msgstr "Options liées à Gobby" #: ../code/main.cpp:199 msgid "Display version information and exit" msgstr "Affiche l'information de version et quitte" #: ../code/main.cpp:206 msgid "Also start a new Gobby instance when there is one running already" msgstr "Démarre une nouvelle instance Gobby même s'il y en a déjà une" #: ../code/main.cpp:214 msgid "Connect to given host on startup, can be given multiple times" msgstr "" "Se connecte à l'hôte indiqué au démarrage, peut apparaître plusieurs fois" #: ../code/main.cpp:215 msgid "HOSTNAME" msgstr "NOM_HÒTE" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "Suppression du nœud « %1 »..." #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "Échec de suppression du nœud « %1 »" #: ../code/operations/operation-export-html.cpp:168 #, c-format msgid "written by: %s" msgstr "écrit par : %s" #: ../code/operations/operation-export-html.cpp:241 msgid "" msgstr "" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:254 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "Document généré à partir de %1$s:%2$s le %3$s par %4$s" #: ../code/operations/operation-export-html.cpp:395 msgid "Participants" msgstr "Participants" #: ../code/operations/operation-export-html.cpp:475 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "Exportation HTML du document « %1 » vers « %2 »..." #: ../code/operations/operation-export-html.cpp:536 msgid "Failed to export document \"%1\" to HTML" msgstr "Impossible d'exporter le document « %1 » en HTML" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "Création du dossier « %1 »..." #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "Création du document « %1 »..." #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "Impossible de créer le dossier « %1 »" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "Impossible de créer le document « %1 »" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "ISO-8859-1" #: ../code/operations/operation-open.cpp:114 msgid "Opening document \"%1\"..." msgstr "Ouverture du document « %1 »..." #: ../code/operations/operation-open.cpp:134 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "" "Le dossier dans lequel le document aurait dû être inséré a été supprimé" #: ../code/operations/operation-open.cpp:323 msgid "The file contains data not in the specified encoding" msgstr "" "Le fichier contient des données incompatibles avec le jeu de caractères " "indiqué" #: ../code/operations/operation-open.cpp:334 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "" "Soit le fichier contient des données dans un codage inconnu, soit il " "contient des données binaires." #: ../code/operations/operation-open-multiple.cpp:91 msgid "Parent folder was removed" msgstr "Le dossier parent a été supprimé" #: ../code/operations/operation-open-multiple.cpp:193 msgid "Failed to open multiple documents" msgstr "Impossible d'ouvrir plusieurs documents" #: ../code/operations/operation-save.cpp:97 msgid "Saving document \"%1\" to \"%2\"..." msgstr "Enregistrement du document « %1 » vers « %2 »..." #: ../code/operations/operation-save.cpp:226 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" "Le document contient un ou plusieurs caractères qui ne peuvent pas être " "codés dans le jeu de caractères indiqué." #: ../code/operations/operation-save.cpp:287 msgid "Failed to save document \"%1\"" msgstr "L'enregistrement du document « %1 » a échoué" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "Le document « %1 » n'a pas pu être ouvert" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 #, fuzzy msgid "Subscribing to \"%1\"..." msgstr "Inscription à %1..." #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "Impossible de créer le dossier « %1 »" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "La connexion à « %1 » a échoué" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 #, fuzzy msgid "Could not subscribe to \"%1\"" msgstr "Impossible de résoudre « %1 »" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "Le périphérique « %1 » n'existe pas" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "Impossible de créer le " #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "Le périphérique « %1 » n'existe pas" #: ../code/window.cpp:104 msgid "This Computer" msgstr "" #: ../code/window.cpp:129 msgid "Document Browser" msgstr "Navigateur de documents" #: ../code/window.cpp:182 msgid "You are still connected to a session" msgstr "Vous êtes toujours connecté à une session" #: ../code/window.cpp:190 msgid "Do you want to close Gobby nevertheless?" msgstr "Souhaitez-vous tout de même fermer Gobby ?" #: ../code/window.cpp:196 msgid "C_ancel" msgstr "_Annuler" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "Gobby" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "Éditeur collaboratif" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "Éditeur collaboratif Gobby (0.5)" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "Éditer des fichiers texte de manière collaborative" #~ msgid "" #~ "This program is free software; you can redistribute it and/or modify it " #~ "under the terms of the GNU General Public License as published by the " #~ "Free Software Foundation; either version 2 of the License, or (at your " #~ "option) any later version.\n" #~ "\n" #~ "This program is distributed in the hope that it will be useful, but " #~ "WITHOUT ANY WARRANTY; without even the implied warranty of " #~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General " #~ "Public License for more details.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgstr "" #~ "Ce programme est un logiciel libre ; vous pouvez le redistribuer et/ou le " #~ "modifier au titre des clauses de la Licence Publique Générale GNU, telle " #~ "que publiée par la Free Software Foundation ; soit la version 2 de la " #~ "Licence, ou (à votre discrétion) une version ultérieure quelconque.\n" #~ "Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS " #~ "AUCUNE GARANTIE ; sans même une garantie implicite de COMMERCIABILITÉ ou " #~ "DE CONFORMITÉ À UNE UTILISATION PARTICULIÈRE. Voir la Licence Publique " #~ "Générale GNU pour plus de détails.\n" #~ "Vous devriez avoir reçu un exemplaire de la Licence Publique Générale GNU " #~ "avec ce programme ; si ce n'est pas le cas, écrivez à la Free Software " #~ "Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, " #~ "USA." #~ msgid "User Join in progress..." #~ msgstr "Adhésion d'utilisateur en cours..." #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "Impossible de résoudre « %1 »" #~ msgid "Resolving \"%1\"..." #~ msgstr "Résolution de « %1 »..." #~ msgid "Paths" #~ msgstr "Chemins" #~ msgid "" #~ "The directory into which locally hosted sessions are permanently stored" #~ msgstr "" #~ "Le dossier dans lequel les sessions hébergées localement sont " #~ "enregistrées de façon permanente" gobby-0.5.0/po/zh_TW.po0000644000175000017500000011020612376151303011551 00000000000000# Gobby Traditional Chinese translation. # Copyright (C) 2010 THE gobby'S COPYRIGHT HOLDER. # This file is distributed under the same license as the gobby package. # Wei-Lun Chao , 2011. # msgid "" msgstr "" "Project-Id-Version: gobby 0.4.94\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-08-23 13:43-0400\n" "PO-Revision-Date: 2010-06-26 17:11+0800\n" "Last-Translator: Wei-Lun Chao \n" "Language-Team: Chinese (traditional) \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: ../code/commands/auth-commands.cpp:196 #, fuzzy msgid "Password required" msgstr "必須輸入密碼" #: ../code/commands/auth-commands.cpp:214 msgid "Incorrect password" msgstr "" #: ../code/commands/browser-commands.cpp:288 msgid "Subscribing to %1..." msgstr "訂用 %1…" #: ../code/commands/browser-commands.cpp:301 msgid "Subscribing to chat on %1..." msgstr "訂用聊天於 %1…" #: ../code/commands/browser-commands.cpp:591 msgid "Subscription failed" msgstr "訂用失敗" #: ../code/commands/browser-context-commands.cpp:86 msgid "Could not find a location where to store the certificate" msgstr "" #: ../code/commands/browser-context-commands.cpp:153 msgid "_Remove" msgstr "" #: ../code/commands/browser-context-commands.cpp:188 #, fuzzy msgid "_Disconnect from Server" msgstr "連線到伺服器" #: ../code/commands/browser-context-commands.cpp:220 #, fuzzy msgid "Create _Account..." msgstr "建立文件(_C)…" #: ../code/commands/browser-context-commands.cpp:245 msgid "Create Do_cument..." msgstr "建立文件(_C)…" #: ../code/commands/browser-context-commands.cpp:280 #, fuzzy msgid "Create Di_rectory..." msgstr "建立目錄…" #: ../code/commands/browser-context-commands.cpp:293 msgid "_Open Document..." msgstr "開啟文件(_O)…" #: ../code/commands/browser-context-commands.cpp:312 msgid "_Permissions..." msgstr "" #: ../code/commands/browser-context-commands.cpp:324 msgid "D_elete" msgstr "刪除(_E)" #: ../code/commands/browser-context-commands.cpp:405 msgid "Choose a name for the directory" msgstr "選擇目錄名稱" #: ../code/commands/browser-context-commands.cpp:406 msgid "Choose a name for the document" msgstr "選擇文件名稱" #: ../code/commands/browser-context-commands.cpp:407 msgid "_Directory Name:" msgstr "目錄名稱(_D):" #: ../code/commands/browser-context-commands.cpp:408 msgid "_Document Name:" msgstr "文件名稱(_D):" #: ../code/commands/browser-context-commands.cpp:411 msgid "C_reate" msgstr "建立(_R)" #: ../code/commands/browser-context-commands.cpp:415 msgid "New Directory" msgstr "新目錄" #: ../code/commands/browser-context-commands.cpp:416 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "新文件" #: ../code/commands/browser-context-commands.cpp:436 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "選擇要開啟的文字檔" #: ../code/commands/browser-context-commands.cpp:558 #: ../code/commands/browser-context-commands.cpp:569 msgid "Account successfully created" msgstr "" #: ../code/commands/browser-context-commands.cpp:562 msgid "When re-connecting to the server, the new account will be used." msgstr "" #: ../code/commands/browser-context-commands.cpp:573 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:586 #, fuzzy msgid "Failed to create account" msgstr "建立文件「%1」時失敗" #: ../code/commands/browser-context-commands.cpp:589 msgid "Could not save the certificate for the account: %1" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "選擇位置以匯出文件「%1」到" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "正在查詢「%1」…" #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:474 #: ../code/operations/operation-open-multiple.cpp:180 msgid "Failed to open document \"%1\"" msgstr "開啟文件「%1」時失敗" #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "選擇位置以儲存文件「%1」到" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:70 msgid "There was an error displaying help." msgstr "出現了錯誤顯示說明。" #: ../code/commands/help-commands.cpp:93 msgid "Contributors:" msgstr "貢獻者:" #: ../code/commands/help-commands.cpp:99 msgid "British English:" msgstr "英語:" #: ../code/commands/help-commands.cpp:101 msgid "German:" msgstr "德語:" #: ../code/commands/help-commands.cpp:118 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" "已經失去對於這份文件出版者的連線。文件的進一步變更將無法再繼續同步到其他人," "因而文件無法再繼續編輯。\n" "\n" "請注意,也有可能在失去與出版者的連線之前,並非您所有的最後變更已送達。" #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "同步化正在進行…%1%%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "這個文件無法使用。" #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" "如果您有某個可能造成此問題的想法,那麼您可以試圖解決它並再次嘗試 (於關閉這個" "文件之後)。否則很有可能是軟體中的錯誤。在這種情況下,請將錯誤回報給 http://" "gobby.0x539.de/trac/newticket 並儘可能提供足夠的資訊,包括當問題發生時您做了" "什麼事,以及如何重新產生問題 (如果可能) ,以便讓我們可以在稍後的版本中修正問" "題。謝謝您。" #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "同步化失敗:%1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "您仍然可以監看其他人編輯文件,但是您無法自行編輯它。" #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "使用者加入失敗:%1" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:111 msgid "_Direct Connection" msgstr "直接的連線(_D)" #: ../code/core/browser.cpp:113 msgid "Host Name:" msgstr "主機名稱:" #: ../code/core/certificatemanager.cpp:83 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:276 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:338 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:414 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/foldermanager.cpp:322 msgid "The document has been removed from the server." msgstr "" #: ../code/core/header.cpp:203 msgid "_None" msgstr "無(_N)" #: ../code/core/header.cpp:227 msgid "_File" msgstr "檔案(_F)" #: ../code/core/header.cpp:230 msgid "_Open..." msgstr "開啟(_O)…" #: ../code/core/header.cpp:233 msgid "Open _Location..." msgstr "開啟位置(_L)…" #: ../code/core/header.cpp:237 msgid "Save _As..." msgstr "另存新檔(_A)…" #: ../code/core/header.cpp:241 ../code/core/iconmanager.cpp:43 msgid "Save All" msgstr "全部儲存" #: ../code/core/header.cpp:241 msgid "Save all open files locally" msgstr "儲存所有開啟檔案於本機" #: ../code/core/header.cpp:243 msgid "Export As _HTML..." msgstr "匯出為 _HTML…" #: ../code/core/header.cpp:246 msgid "Connect _to Server..." msgstr "連線到伺服器(_T)…" #: ../code/core/header.cpp:251 msgid "_Edit" msgstr "編輯(_E)" #: ../code/core/header.cpp:259 msgid "_Find..." msgstr "尋找(_F)…" #: ../code/core/header.cpp:261 msgid "Find Ne_xt" msgstr "找下一個(_X)" #: ../code/core/header.cpp:262 msgid "Find next match of phrase searched for" msgstr "找下一個匹配的片語依據搜尋" #: ../code/core/header.cpp:265 msgid "Find Pre_vious" msgstr "找上一個(_V)" #: ../code/core/header.cpp:266 msgid "Find previous match of phrase searched for" msgstr "找上一個匹配的片語依據搜尋" #: ../code/core/header.cpp:271 msgid "Find and Rep_lace..." msgstr "尋找和置換(_L)…" #: ../code/core/header.cpp:275 msgid "Go to _Line..." msgstr "前往指定列(_L)…" #: ../code/core/header.cpp:279 msgid "Pr_eferences..." msgstr "偏好設定(_E)…" #: ../code/core/header.cpp:281 msgid "_View" msgstr "檢視(_V)" #: ../code/core/header.cpp:284 msgid "Reset User Colors" msgstr "重置使用者顏色" #: ../code/core/header.cpp:285 msgid "Hide user colors in current document" msgstr "在目前的文件中隱藏使用者顏色" #: ../code/core/header.cpp:289 msgid "Fullscreen" msgstr "" #: ../code/core/header.cpp:290 msgid "Show the editing window in fullscreen mode" msgstr "" #: ../code/core/header.cpp:294 msgid "Zoom In" msgstr "" #: ../code/core/header.cpp:297 msgid "Zoom Out" msgstr "" #: ../code/core/header.cpp:300 msgid "View Toolbar" msgstr "檢視工具列" #: ../code/core/header.cpp:301 msgid "Whether to show the toolbar" msgstr "是否要顯示工具列" #: ../code/core/header.cpp:305 msgid "View Statusbar" msgstr "檢視狀態列" #: ../code/core/header.cpp:306 msgid "Whether to show the statusbar" msgstr "是否要顯示狀態列" #: ../code/core/header.cpp:310 msgid "View Document Browser" msgstr "檢視文件瀏覽器" #: ../code/core/header.cpp:311 msgid "Whether to show the document browser" msgstr "是否要顯示文件瀏覽器" #: ../code/core/header.cpp:315 msgid "View Chat" msgstr "檢視聊天" #: ../code/core/header.cpp:316 msgid "Whether to show the chat pane" msgstr "是否要顯示聊天窗格" #: ../code/core/header.cpp:320 msgid "View Document User List" msgstr "檢視文件使用者清單" #: ../code/core/header.cpp:321 msgid "Whether to show the user list for documents" msgstr "是否要顯示文件的使用者清單" #: ../code/core/header.cpp:325 msgid "View Chat User List" msgstr "檢視聊天使用者清單" #: ../code/core/header.cpp:326 msgid "Whether to show the user list for the chat" msgstr "是否要顯示聊天的使用者清單" #: ../code/core/header.cpp:330 msgid "_Highlight Mode" msgstr "強調模式(_H)" #: ../code/core/header.cpp:336 msgid "_Help" msgstr "求助(_H)" #: ../code/core/header.cpp:339 msgid "_Contents" msgstr "內容(_C)" #: ../code/core/header.cpp:340 msgid "Opens the Gobby manual" msgstr "手動開啟 Gobby" #: ../code/core/header.cpp:343 msgid "_About..." msgstr "關於(_A)…" #: ../code/core/header.cpp:344 msgid "Shows Gobby's copyright and credits" msgstr "顯示 Gobby 的著作權和鳴謝" #: ../code/core/iconmanager.cpp:49 msgid "User list" msgstr "使用者清單" #: ../code/core/iconmanager.cpp:55 msgid "Document list" msgstr "文件清單" #: ../code/core/iconmanager.cpp:61 ../code/window.cpp:52 msgid "Chat" msgstr "聊天" #: ../code/core/iconmanager.cpp:68 msgid "User Color Indicator" msgstr "使用者顏色指示器" #: ../code/core/selfhoster.cpp:103 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:135 #, fuzzy msgid "Failed to generate Diffie-Hellman parameters" msgstr "刪除節點「%1」時失敗" #: ../code/core/selfhoster.cpp:137 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:262 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:282 #, fuzzy msgid "Failed to share documents" msgstr "儲存文件「%1」時失敗" #: ../code/core/sessionuserview.cpp:39 msgid "User List" msgstr "使用者清單" #: ../code/core/statusbar.cpp:418 msgid "Ln %1, Col %2\t%3" msgstr "列 %1, 行 %2\t%3" #: ../code/core/statusbar.cpp:421 msgid "OVR" msgstr "覆寫" #: ../code/core/statusbar.cpp:421 msgid "INS" msgstr "插入" #: ../code/core/textsessionview.cpp:638 msgid "Text written by %1" msgstr "文章由 %1 編寫" #: ../code/core/textsessionview.cpp:644 msgid "Unowned text" msgstr "無主的文章" #: ../code/core/userlist.cpp:108 msgid "Users" msgstr "使用者" #: ../code/dialogs/connection-dialog.cpp:26 msgid "Connect to Server" msgstr "連線到伺服器" #: ../code/dialogs/connection-dialog.cpp:30 msgid "Please enter a host name with which to establish a connection." msgstr "請輸入要與其建立連線的主機名稱。" #: ../code/dialogs/connection-dialog.cpp:32 msgid "_Remote Endpoint:" msgstr "遠端終點(_R):" #: ../code/dialogs/document-location-dialog.cpp:28 msgid "Document Name:" msgstr "文件名稱:" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Select document's target location" msgstr "選取文件目標位置" #: ../code/dialogs/document-location-dialog.cpp:157 msgid "Choose a directory to create the document into:" msgstr "選擇目錄以於其中建立文件:" #: ../code/dialogs/document-location-dialog.cpp:163 msgid "Select documents' target location" msgstr "選取文件目標位置" #: ../code/dialogs/document-location-dialog.cpp:165 msgid "Choose a directory to create the documents into:" msgstr "選擇目錄以於其中建立文件:" #: ../code/dialogs/find-dialog.cpp:44 ../code/dialogs/find-dialog.cpp:142 msgid "Find" msgstr "尋找" #: ../code/dialogs/find-dialog.cpp:47 msgid "_Search for:" msgstr "搜尋(_S):" #: ../code/dialogs/find-dialog.cpp:49 msgid "Replace _with:" msgstr "置換成(_W):" #: ../code/dialogs/find-dialog.cpp:51 msgid "_Match case" msgstr "匹配大小寫(_M)" #: ../code/dialogs/find-dialog.cpp:52 msgid "Match _entire word only" msgstr "匹配完整字詞(_E)" #: ../code/dialogs/find-dialog.cpp:53 msgid "Search _backwards" msgstr "向後搜尋(_B)" #: ../code/dialogs/find-dialog.cpp:54 msgid "Wra_p around" msgstr "回到開始部份(_P)" #: ../code/dialogs/find-dialog.cpp:100 msgid "Replace _All" msgstr "全部置換(_A)" #: ../code/dialogs/find-dialog.cpp:102 msgid "_Replace" msgstr "置換(_R)" #: ../code/dialogs/find-dialog.cpp:142 msgid "Replace" msgstr "置換" #: ../code/dialogs/find-dialog.cpp:161 ../code/dialogs/find-dialog.cpp:177 msgid "Phrase \"%1\" has not been found" msgstr "片語「%1」尚未找到" #: ../code/dialogs/find-dialog.cpp:335 msgid "No occurrence has been replaced" msgstr "沒有置換任何項目" #: ../code/dialogs/find-dialog.cpp:341 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "已經置換 %1 個項目" #: ../code/dialogs/goto-dialog.cpp:26 msgid "Go to line" msgstr "前往指定列" #: ../code/dialogs/goto-dialog.cpp:29 msgid "Line _number:" msgstr "列號(_N):" #: ../code/dialogs/goto-dialog.cpp:50 msgid "Go To _Line" msgstr "前往指定列(_L)" #: ../code/dialogs/initial-dialog.cpp:76 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:99 #, fuzzy msgid "Failed to generate private key" msgstr "刪除節點「%1」時失敗" #: ../code/dialogs/initial-dialog.cpp:102 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:141 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:144 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:198 msgid "Choose a user color" msgstr "選擇使用者顏色" #: ../code/dialogs/initial-dialog.cpp:204 msgid "Welcome to Gobby" msgstr "歡迎使用 Gobby" #: ../code/dialogs/initial-dialog.cpp:216 msgid "" "Before we start, a few options need to be configured. You can later change " "them by choosing Edit ▸ Preferences from the menu." msgstr "" "在開始之前,需要組配幾個選項。您可以稍後藉由從選單選擇「編輯▸偏好設定」來變更" "它們。" #: ../code/dialogs/initial-dialog.cpp:224 msgid "User Name" msgstr "使用者名稱" #: ../code/dialogs/initial-dialog.cpp:226 msgid "Your name as shown to other users." msgstr "您顯示給其他使用者看的名稱。" #: ../code/dialogs/initial-dialog.cpp:235 msgid "User Color" msgstr "使用者顏色" #: ../code/dialogs/initial-dialog.cpp:237 msgid "The color with which text you have written is branded." msgstr "用來標示您所寫文字的顏色。" #: ../code/dialogs/initial-dialog.cpp:256 #, fuzzy msgid "Remote Connections" msgstr "安全連線" #: ../code/dialogs/initial-dialog.cpp:262 #: ../code/dialogs/preferences-dialog.cpp:217 msgid "Allow remote users to edit local documents" msgstr "" #: ../code/dialogs/initial-dialog.cpp:268 msgid "Ask remote users for a password" msgstr "" #: ../code/dialogs/initial-dialog.cpp:273 #: ../code/dialogs/preferences-dialog.cpp:220 #, fuzzy msgid "Password:" msgstr "伺服器密碼(_P):" #: ../code/dialogs/initial-dialog.cpp:297 msgid "No authentication (Not recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:304 msgid "" "Don't authenticate ourselves to remote users. Data transfer will be " "unencrypted." msgstr "" #: ../code/dialogs/initial-dialog.cpp:313 msgid "Create a self-signed certificate (Recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:321 msgid "" "It may take a minute or two until remote users can connect while the " "security certificate is being generated." msgstr "" #: ../code/dialogs/initial-dialog.cpp:331 msgid "Use an existing certificate (Expert option)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:338 msgid "" "Use an existing private key and certificate for authentication. The files " "must be in PEM format." msgstr "" #: ../code/dialogs/initial-dialog.cpp:347 #: ../code/dialogs/preferences-dialog.cpp:766 msgid "Private key:" msgstr "" #: ../code/dialogs/initial-dialog.cpp:349 #: ../code/dialogs/preferences-dialog.cpp:772 msgid "Certificate:" msgstr "" #: ../code/dialogs/open-location-dialog.cpp:26 msgid "Open Location" msgstr "開啟位置" #: ../code/dialogs/open-location-dialog.cpp:27 msgid "Enter the _location (URI) of the file you would like to open:" msgstr "輸入您想要開啟的檔案位置(URI)(_L):" #: ../code/dialogs/password-dialog.cpp:25 msgid "Password Required" msgstr "必須輸入密碼" #: ../code/dialogs/password-dialog.cpp:31 msgid "Connection to host \"%1\" requires a password." msgstr "連線到主機「%1」需要密碼。" #: ../code/dialogs/password-dialog.cpp:32 msgid "Invalid password for host \"%1\". Please try again." msgstr "密碼對於主機「%1」無效。請再試一次。" #: ../code/dialogs/password-dialog.cpp:35 msgid "Server _Password:" msgstr "伺服器密碼(_P):" #: ../code/dialogs/preferences-dialog.cpp:198 msgid "Settings" msgstr "設定值" #: ../code/dialogs/preferences-dialog.cpp:199 #, fuzzy msgid "Remote Users" msgstr "重置使用者顏色" #: ../code/dialogs/preferences-dialog.cpp:200 #, fuzzy msgid "Local Documents" msgstr "新文件" #: ../code/dialogs/preferences-dialog.cpp:202 msgid "User name:" msgstr "使用者名稱:" #: ../code/dialogs/preferences-dialog.cpp:204 msgid "User color:" msgstr "使用者顏色:" #: ../code/dialogs/preferences-dialog.cpp:206 msgid "Color intensity:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:208 msgid "Choose a new user color" msgstr "選擇新的使用者顏色" #: ../code/dialogs/preferences-dialog.cpp:209 msgid "Show cursors of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:210 msgid "Show selections of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:212 #, fuzzy msgid "Highlight current line of remote users" msgstr "強調目前的列" #: ../code/dialogs/preferences-dialog.cpp:214 msgid "Indicate cursor position of remote users in the scrollbar" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:219 msgid "Require remote users to enter a password" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:222 msgid "Port:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:226 msgid "Remember local documents after Gobby restart" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:227 #, fuzzy msgid "Local documents directory:" msgstr "主機目錄:" #: ../code/dialogs/preferences-dialog.cpp:423 msgid "Tab Stops" msgstr "定位停駐點" #: ../code/dialogs/preferences-dialog.cpp:424 msgid "Indentation" msgstr "縮排" #: ../code/dialogs/preferences-dialog.cpp:425 msgid "Home/End Behavior" msgstr "Home/End 按鍵行為" #: ../code/dialogs/preferences-dialog.cpp:426 msgid "File Saving" msgstr "檔案儲存" #: ../code/dialogs/preferences-dialog.cpp:427 msgid "_Tab width:" msgstr "定位點寬度(_T):" #: ../code/dialogs/preferences-dialog.cpp:429 msgid "Insert _spaces instead of tabs" msgstr "插入空格以代替跳格(_S)" #: ../code/dialogs/preferences-dialog.cpp:430 msgid "Enable automatic _indentation" msgstr "啟用自動縮排(_I)" #: ../code/dialogs/preferences-dialog.cpp:431 msgid "Smart _home/end" msgstr "智慧型 _Home/End" #: ../code/dialogs/preferences-dialog.cpp:432 msgid "Enable _automatic saving of documents" msgstr "啟用文件自動儲存(_A)" #: ../code/dialogs/preferences-dialog.cpp:434 msgid "Autosave interval in _minutes:" msgstr "自動儲存間隔以分鐘為單位(_M):" #: ../code/dialogs/preferences-dialog.cpp:455 msgid "" "With this option enabled, Home/End keys move to first/last character before " "going to the start/end of the line." msgstr "" "如果啟用這個選項,Home/End 按鍵會在前往列首/列尾之前移動到第一/最後一個字元。" #: ../code/dialogs/preferences-dialog.cpp:525 msgid "Text Wrapping" msgstr "文字環繞" #: ../code/dialogs/preferences-dialog.cpp:526 msgid "Line Numbers" msgstr "列號" #: ../code/dialogs/preferences-dialog.cpp:527 msgid "Current Line" msgstr "目前的列" #: ../code/dialogs/preferences-dialog.cpp:528 msgid "Right Margin" msgstr "右邊界" #: ../code/dialogs/preferences-dialog.cpp:529 msgid "Bracket Matching" msgstr "中括號匹配" #: ../code/dialogs/preferences-dialog.cpp:530 msgid "Whitespace Display" msgstr "空白顯示" #: ../code/dialogs/preferences-dialog.cpp:531 msgid "Enable text wrapping" msgstr "啟用文字環繞" #: ../code/dialogs/preferences-dialog.cpp:532 msgid "Do not split words over two lines" msgstr "不分割單字於兩列" #: ../code/dialogs/preferences-dialog.cpp:533 msgid "Display line numbers" msgstr "顯示列號" #: ../code/dialogs/preferences-dialog.cpp:534 msgid "Highlight current line" msgstr "強調目前的列" #: ../code/dialogs/preferences-dialog.cpp:535 msgid "Display right margin" msgstr "顯示右邊界" #: ../code/dialogs/preferences-dialog.cpp:536 msgid "Right margin at column:" msgstr "右邊界於行數:" #: ../code/dialogs/preferences-dialog.cpp:537 msgid "Highlight matching bracket" msgstr "強調匹配中括號" #: ../code/dialogs/preferences-dialog.cpp:589 msgid "Display no whitespace" msgstr "不顯示任何空格" #: ../code/dialogs/preferences-dialog.cpp:592 msgid "Display spaces" msgstr "顯示空格" #: ../code/dialogs/preferences-dialog.cpp:596 msgid "Display tabs" msgstr "顯示跳格" #: ../code/dialogs/preferences-dialog.cpp:600 msgid "Display tabs and spaces" msgstr "顯示跳格和空格" #: ../code/dialogs/preferences-dialog.cpp:651 msgid "Toolbar" msgstr "工具列" #: ../code/dialogs/preferences-dialog.cpp:652 msgid "Font" msgstr "字型" #: ../code/dialogs/preferences-dialog.cpp:653 msgid "Color Scheme" msgstr "配色方案" #: ../code/dialogs/preferences-dialog.cpp:661 msgid "Show text only" msgstr "只顯示文字" #: ../code/dialogs/preferences-dialog.cpp:663 msgid "Show icons only" msgstr "只顯示圖示" #: ../code/dialogs/preferences-dialog.cpp:665 msgid "Show both icons and text" msgstr "顯示圖示和文字" #: ../code/dialogs/preferences-dialog.cpp:667 msgid "Show text besides icons" msgstr "在圖示旁邊顯示文字" #: ../code/dialogs/preferences-dialog.cpp:756 msgid "Trusted CAs" msgstr "信賴的 CAs" #: ../code/dialogs/preferences-dialog.cpp:757 msgid "Secure Connection" msgstr "安全連線" #: ../code/dialogs/preferences-dialog.cpp:758 #, fuzzy msgid "Authentication" msgstr "縮排" #: ../code/dialogs/preferences-dialog.cpp:759 msgid "Select a file containing trusted CAs" msgstr "選取包含信賴的 CAs 檔案" #: ../code/dialogs/preferences-dialog.cpp:764 #, fuzzy msgid "None" msgstr "無(_N)" #: ../code/dialogs/preferences-dialog.cpp:765 msgid "Use a certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:767 msgid "Select a private key file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:769 #: ../code/dialogs/preferences-dialog.cpp:776 #, fuzzy msgid "Create New..." msgstr "建立文件(_C)…" #: ../code/dialogs/preferences-dialog.cpp:773 msgid "Select a certificate file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:801 msgid "Use TLS if possible" msgstr "儘量使用 TLS" #: ../code/dialogs/preferences-dialog.cpp:804 msgid "Always use TLS" msgstr "一律使用 TLS" #: ../code/dialogs/preferences-dialog.cpp:892 msgid "Error reading file:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:916 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:948 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:966 msgid "Select a location for the generated certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:1068 msgid "Preferences" msgstr "偏好設定" #: ../code/dialogs/preferences-dialog.cpp:1073 msgid "User" msgstr "使用者" #: ../code/dialogs/preferences-dialog.cpp:1074 msgid "Editor" msgstr "編輯器" #: ../code/dialogs/preferences-dialog.cpp:1075 msgid "View" msgstr "檢視" #: ../code/dialogs/preferences-dialog.cpp:1076 msgid "Appearance" msgstr "外觀" #: ../code/dialogs/preferences-dialog.cpp:1077 msgid "Security" msgstr "安全" #: ../code/main.cpp:194 msgid "Gobby options" msgstr "Gobby 選項" #: ../code/main.cpp:194 msgid "Options related to Gobby" msgstr "與 Gobby 相關的選項" #: ../code/main.cpp:199 msgid "Display version information and exit" msgstr "顯示版本資訊然後離開" #: ../code/main.cpp:206 msgid "Also start a new Gobby instance when there is one running already" msgstr "當已經有一個執行中的 Gobby 時,也要開啟新的實體" #: ../code/main.cpp:214 msgid "Connect to given host on startup, can be given multiple times" msgstr "啟動時連線到給定的主機,可以多次給定" #: ../code/main.cpp:215 msgid "HOSTNAME" msgstr "主機名稱" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "移除節點「%1」…" #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "刪除節點「%1」時失敗" #: ../code/operations/operation-export-html.cpp:168 #, c-format msgid "written by: %s" msgstr "由 %s 所編寫" #: ../code/operations/operation-export-html.cpp:241 msgid "" msgstr "<無法印出日期>" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:254 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "文件產生自 %1$s:%2$s 於 %3$s 由 %4$s" #: ../code/operations/operation-export-html.cpp:395 msgid "Participants" msgstr "參加者" #: ../code/operations/operation-export-html.cpp:475 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "以 HTML 匯出文件「%1」到「%2」…" #: ../code/operations/operation-export-html.cpp:536 msgid "Failed to export document \"%1\" to HTML" msgstr "以 HTML 匯出文件「%1」時失敗" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "建立目錄「%1」…" #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "建立文件「%1」…" #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "建立目錄「%1」時失敗" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "建立文件「%1」時失敗" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "UTF-8" #: ../code/operations/operation-open.cpp:114 msgid "Opening document \"%1\"..." msgstr "開啟文件「%1」…" #: ../code/operations/operation-open.cpp:134 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "預計用來插入新文件的目錄已被移除" #: ../code/operations/operation-open.cpp:323 msgid "The file contains data not in the specified encoding" msgstr "檔案含有不屬於指定編碼的資料" #: ../code/operations/operation-open.cpp:334 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "檔案若非含有不明編碼的資料,就是含有二進位資料。" #: ../code/operations/operation-open-multiple.cpp:91 msgid "Parent folder was removed" msgstr "上層資料夾被移除了" #: ../code/operations/operation-open-multiple.cpp:193 msgid "Failed to open multiple documents" msgstr "開啟多份文件時失敗" #: ../code/operations/operation-save.cpp:97 msgid "Saving document \"%1\" to \"%2\"..." msgstr "儲存文件「%1」到「%2」…" #: ../code/operations/operation-save.cpp:226 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "文件含有一或多個不屬於指定字元編碼的字元。" #: ../code/operations/operation-save.cpp:287 msgid "Failed to save document \"%1\"" msgstr "儲存文件「%1」時失敗" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "開啟文件「%1」時失敗" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 #, fuzzy msgid "Subscribing to \"%1\"..." msgstr "訂用 %1…" #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "建立目錄「%1」時失敗" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "連線到「%1」失敗" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 #, fuzzy msgid "Could not subscribe to \"%1\"" msgstr "無法解析「%1」" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "裝置「%1」不存在" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "無法建立目錄「%1」:%2" #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "裝置「%1」不存在" #: ../code/window.cpp:104 msgid "This Computer" msgstr "" #: ../code/window.cpp:129 msgid "Document Browser" msgstr "文件瀏覽器" #: ../code/window.cpp:182 msgid "You are still connected to a session" msgstr "您仍然與作業階段連線" #: ../code/window.cpp:190 msgid "Do you want to close Gobby nevertheless?" msgstr "您無論如何都要關閉 Gobby 嗎?" #: ../code/window.cpp:196 msgid "C_ancel" msgstr "取消(_A)" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "Gobby" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "共同編輯器" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "Gobby 共同編輯器 (0.5)" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "共同編輯文字檔" #~ msgid "" #~ "This program is free software; you can redistribute it and/or modify it " #~ "under the terms of the GNU General Public License as published by the " #~ "Free Software Foundation; either version 2 of the License, or (at your " #~ "option) any later version.\n" #~ "\n" #~ "This program is distributed in the hope that it will be useful, but " #~ "WITHOUT ANY WARRANTY; without even the implied warranty of " #~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General " #~ "Public License for more details.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgstr "" #~ "這個程式是自由軟體;您可以遵循由自由軟體基金會所發布的 GNU 通用公共授權來" #~ "再次散布它和/或修改它;無論您依據的是本授權的第二版,或 (您自行選擇的) 任" #~ "何後續的版本。\n" #~ "\n" #~ "發行本程式是希望該它能夠有用, 但是沒有任何擔保;對於某一特定目的之適售性" #~ "與適用性亦無暗示性的擔保。參看 GNU 通用公共授權以獲得更多細節。\n" #~ "\n" #~ "您應該已收到隨附於這個程式的 GNU 通用公共授權複本;若無則請寫信到 Free " #~ "Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA " #~ "02110-1301, USA" #~ msgid "User Join in progress..." #~ msgstr "使用者正在加入…" #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "無法解析「%1」" #~ msgid "Resolving \"%1\"..." #~ msgstr "正在解析「%1」…" #~ msgid "Paths" #~ msgstr "路徑" #~ msgid "" #~ "The directory into which locally hosted sessions are permanently stored" #~ msgstr "本機寄存作業階段永久儲存於其中的目錄" gobby-0.5.0/po/LINGUAS0000644000175000017500000000004412364474462011214 00000000000000ca de el_GR en_GB fr ja zh_TW pt_BR gobby-0.5.0/po/de.po0000644000175000017500000011420512376151302011110 00000000000000# Gobby German translation # Copyright (C) 2010 Michael Frey # This file is distributed under the same license as the gobby-0.5 package. # Michael Frey , 2010 msgid "" msgstr "" "Project-Id-Version: 0.4.93\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-08-23 13:43-0400\n" "PO-Revision-Date: 2010-02-07 09:40+0100\n" "Last-Translator: Michael Frey \n" "Language-Team: \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../code/commands/auth-commands.cpp:196 #, fuzzy msgid "Password required" msgstr "Passwort benötigt" #: ../code/commands/auth-commands.cpp:214 msgid "Incorrect password" msgstr "" #: ../code/commands/browser-commands.cpp:288 msgid "Subscribing to %1..." msgstr "Anmeldung bei %1…" #: ../code/commands/browser-commands.cpp:301 msgid "Subscribing to chat on %1..." msgstr "Anmeldung zum Chat bei %1…" #: ../code/commands/browser-commands.cpp:591 msgid "Subscription failed" msgstr "Anmeldung fehlgeschlagen" #: ../code/commands/browser-context-commands.cpp:86 msgid "Could not find a location where to store the certificate" msgstr "" #: ../code/commands/browser-context-commands.cpp:153 msgid "_Remove" msgstr "" #: ../code/commands/browser-context-commands.cpp:188 #, fuzzy msgid "_Disconnect from Server" msgstr "Zu Server verbinden" #: ../code/commands/browser-context-commands.cpp:220 #, fuzzy msgid "Create _Account..." msgstr "Dokument erstellen…" #: ../code/commands/browser-context-commands.cpp:245 msgid "Create Do_cument..." msgstr "Dokument erstellen…" #: ../code/commands/browser-context-commands.cpp:280 #, fuzzy msgid "Create Di_rectory..." msgstr "Verzeichnis erstellen…" #: ../code/commands/browser-context-commands.cpp:293 msgid "_Open Document..." msgstr "Dokument ö_ffnen…" #: ../code/commands/browser-context-commands.cpp:312 msgid "_Permissions..." msgstr "" #: ../code/commands/browser-context-commands.cpp:324 msgid "D_elete" msgstr "_Löschen" #: ../code/commands/browser-context-commands.cpp:405 msgid "Choose a name for the directory" msgstr "Wählen Sie einen Namen für das Verzeichnis" #: ../code/commands/browser-context-commands.cpp:406 msgid "Choose a name for the document" msgstr "Wählen Sie einen Namen für das Dokument:" #: ../code/commands/browser-context-commands.cpp:407 msgid "_Directory Name:" msgstr "_Verzeichnisname:" #: ../code/commands/browser-context-commands.cpp:408 msgid "_Document Name:" msgstr "_Dokumentname:" #: ../code/commands/browser-context-commands.cpp:411 msgid "C_reate" msgstr "E_rstellen" #: ../code/commands/browser-context-commands.cpp:415 msgid "New Directory" msgstr "Neues Verzeichnis" #: ../code/commands/browser-context-commands.cpp:416 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "Neues Dokument" #: ../code/commands/browser-context-commands.cpp:436 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "Dateien öffnen" #: ../code/commands/browser-context-commands.cpp:558 #: ../code/commands/browser-context-commands.cpp:569 msgid "Account successfully created" msgstr "" #: ../code/commands/browser-context-commands.cpp:562 msgid "When re-connecting to the server, the new account will be used." msgstr "" #: ../code/commands/browser-context-commands.cpp:573 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:586 #, fuzzy msgid "Failed to create account" msgstr "Erstellen des Dokuments »%1« fehlgeschlagen" #: ../code/commands/browser-context-commands.cpp:589 msgid "Could not save the certificate for the account: %1" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "Wählen Sie ein Verzeichnis zum Exportieren der Datei »%1«" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "»%1« wird abgefragt" #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:474 #: ../code/operations/operation-open-multiple.cpp:180 msgid "Failed to open document \"%1\"" msgstr "Öffnen des Dokuments fehlschlagen »%1«" #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "Wählen Sie ein Verzeichnis zum Speichern der Datei »%1«" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:70 msgid "There was an error displaying help." msgstr "Beim Anzeigen der Hilfe ist ein Fehler aufgetreten." #: ../code/commands/help-commands.cpp:93 msgid "Contributors:" msgstr "Mitwirkende:" #: ../code/commands/help-commands.cpp:99 msgid "British English:" msgstr "Britisches Englisch:" #: ../code/commands/help-commands.cpp:101 msgid "German:" msgstr "Deutsch:" #: ../code/commands/help-commands.cpp:118 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" "Die Verbindung zum Verteiler dieses Dokumentes wurde verloren. Änderungen am " "Dokument können nicht mehr mit anderen abgeglichen werden, daher kann dieses " "Dokument nicht mehr bearbeitet werden.\n" "\n" "Bitte beachten Sie, dass ihre letzten Änderungen möglicherweise nicht mehr " "den Verteiler erreichen konnten, bevor die Verbindung verloren ging." #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "Abgleich in Arbeit… %1%%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "Dieses Dokument kann nicht verwendet werden." #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" "Falls Sie eine Möglichkeit zur Behebung des Problems sehen, können Sie das " "Dokument schließen und es erneut versuchen. Ansonsten handelt es sich " "wahrscheinlich um einen Programmfehler. In diesem Fall können Sie einen " "Fehlerbericht unter http://gobby.0x539.de/trac/newticket einreichen mit " "möglichst vielen zusätzlichen Informationen, insbesondere, was Sie gerade " "taten, als das Problem auftrat, und, wenn möglich, wie man es reproduzieren " "kann, so dass wir den Fehler für die nächste Version beheben können. Vielen " "Dank." #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "Abgleich fehlgeschlagen: %1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" "Sie können anderen beim Bearbeiten des Dokuments zusehen, aber nicht selbst " "Änderungen vornehmen." #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "Anmeldung fehlgeschlagen: %1" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:111 msgid "_Direct Connection" msgstr "Direkt_verbindung" #: ../code/core/browser.cpp:113 msgid "Host Name:" msgstr "Servername:" #: ../code/core/certificatemanager.cpp:83 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:276 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:338 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:414 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/foldermanager.cpp:322 msgid "The document has been removed from the server." msgstr "" #: ../code/core/header.cpp:203 msgid "_None" msgstr "_Keine" #: ../code/core/header.cpp:227 msgid "_File" msgstr "_Datei" #: ../code/core/header.cpp:230 msgid "_Open..." msgstr "Ö_ffnen…" #: ../code/core/header.cpp:233 msgid "Open _Location..." msgstr "_Ort öffnen…" #: ../code/core/header.cpp:237 msgid "Save _As..." msgstr "Speichern _als…" #: ../code/core/header.cpp:241 ../code/core/iconmanager.cpp:43 msgid "Save All" msgstr "Alle speichern" #: ../code/core/header.cpp:241 msgid "Save all open files locally" msgstr "Alle offenen Dateien lokal speichern" #: ../code/core/header.cpp:243 msgid "Export As _HTML..." msgstr "Als _HTML exportieren..." #: ../code/core/header.cpp:246 msgid "Connect _to Server..." msgstr "_Zu Server verbinden…" #: ../code/core/header.cpp:251 msgid "_Edit" msgstr "_Bearbeiten" #: ../code/core/header.cpp:259 msgid "_Find..." msgstr "_Suchen…" #: ../code/core/header.cpp:261 msgid "Find Ne_xt" msgstr "_Weitersuchen" #: ../code/core/header.cpp:262 msgid "Find next match of phrase searched for" msgstr "Suche nach nächstem Vorkommen des Suchbegriffs" #: ../code/core/header.cpp:265 msgid "Find Pre_vious" msgstr "_Rückwärts suchen" #: ../code/core/header.cpp:266 msgid "Find previous match of phrase searched for" msgstr "Suche nach vorigem Vorkommen des Suchbegriffs" #: ../code/core/header.cpp:271 msgid "Find and Rep_lace..." msgstr "Suchen und _Ersetzen…" #: ../code/core/header.cpp:275 msgid "Go to _Line..." msgstr "Gehe zu _Zeile…" #: ../code/core/header.cpp:279 msgid "Pr_eferences..." msgstr "_Einstellungen…" #: ../code/core/header.cpp:281 msgid "_View" msgstr "_Ansicht" #: ../code/core/header.cpp:284 msgid "Reset User Colors" msgstr "Benutzerfarben zurücksetzen" #: ../code/core/header.cpp:285 msgid "Hide user colors in current document" msgstr "Benutzerfarben im aktuellen Dokument nicht anzeigen" #: ../code/core/header.cpp:289 msgid "Fullscreen" msgstr "" #: ../code/core/header.cpp:290 msgid "Show the editing window in fullscreen mode" msgstr "" #: ../code/core/header.cpp:294 msgid "Zoom In" msgstr "" #: ../code/core/header.cpp:297 msgid "Zoom Out" msgstr "" #: ../code/core/header.cpp:300 msgid "View Toolbar" msgstr "Zeige Werkzeugleiste" #: ../code/core/header.cpp:301 msgid "Whether to show the toolbar" msgstr "Ob die Werkzeugleiste angezeigt werden soll" #: ../code/core/header.cpp:305 msgid "View Statusbar" msgstr "Zeige Statusleiste" #: ../code/core/header.cpp:306 msgid "Whether to show the statusbar" msgstr "Ob die Statusleiste angezeigt werden soll" #: ../code/core/header.cpp:310 msgid "View Document Browser" msgstr "Zeige Dokumentenliste" #: ../code/core/header.cpp:311 msgid "Whether to show the document browser" msgstr "Ob die Dokumentenliste angezeigt werden soll" #: ../code/core/header.cpp:315 msgid "View Chat" msgstr "Chat anzeigen" #: ../code/core/header.cpp:316 msgid "Whether to show the chat pane" msgstr "Ob das Chatfenster angezeigt werden soll" #: ../code/core/header.cpp:320 msgid "View Document User List" msgstr "Zeige Dokument-Benutzerliste" #: ../code/core/header.cpp:321 msgid "Whether to show the user list for documents" msgstr "Ob die Benutzerliste für Dokumente angezeigt werden soll" #: ../code/core/header.cpp:325 msgid "View Chat User List" msgstr "Zeige Chat-Benutzerliste" #: ../code/core/header.cpp:326 msgid "Whether to show the user list for the chat" msgstr "Ob die Benutzerliste des Chats angezeigt werden soll" #: ../code/core/header.cpp:330 msgid "_Highlight Mode" msgstr "_Syntaxhervorhebung" #: ../code/core/header.cpp:336 msgid "_Help" msgstr "_Hilfe" #: ../code/core/header.cpp:339 msgid "_Contents" msgstr "_Inhalt" #: ../code/core/header.cpp:340 msgid "Opens the Gobby manual" msgstr "Öffnet die Gobby-Anleitung" #: ../code/core/header.cpp:343 msgid "_About..." msgstr "Ü_ber…" #: ../code/core/header.cpp:344 msgid "Shows Gobby's copyright and credits" msgstr "Zeigt Gobbys Lizenz und Autoren" #: ../code/core/iconmanager.cpp:49 msgid "User list" msgstr "Benutzerliste:" #: ../code/core/iconmanager.cpp:55 msgid "Document list" msgstr "Dokumentenliste" #: ../code/core/iconmanager.cpp:61 ../code/window.cpp:52 msgid "Chat" msgstr "Chat" #: ../code/core/iconmanager.cpp:68 msgid "User Color Indicator" msgstr "Benutzerfarbenindikator" #: ../code/core/selfhoster.cpp:103 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:135 #, fuzzy msgid "Failed to generate Diffie-Hellman parameters" msgstr "Entfernen des Eintrags »%1« fehlgeschlagen" #: ../code/core/selfhoster.cpp:137 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:262 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:282 #, fuzzy msgid "Failed to share documents" msgstr "Speichern des Dokuments »%1« fehlgeschlagen" #: ../code/core/sessionuserview.cpp:39 msgid "User List" msgstr "Benutzerliste" #: ../code/core/statusbar.cpp:418 msgid "Ln %1, Col %2\t%3" msgstr "Z. %1, Sp. %2\t%3" #: ../code/core/statusbar.cpp:421 msgid "OVR" msgstr "ÜBS" #: ../code/core/statusbar.cpp:421 msgid "INS" msgstr "EIN" #: ../code/core/textsessionview.cpp:638 msgid "Text written by %1" msgstr "Text geschrieben von %1" #: ../code/core/textsessionview.cpp:644 msgid "Unowned text" msgstr "Kein Verfasser" #: ../code/core/userlist.cpp:108 msgid "Users" msgstr "Benutzer" #: ../code/dialogs/connection-dialog.cpp:26 msgid "Connect to Server" msgstr "Zu Server verbinden" #: ../code/dialogs/connection-dialog.cpp:30 msgid "Please enter a host name with which to establish a connection." msgstr "" "Bitte geben sie den Namen des Servers ein, zu dem Sie verbinden wollen." #: ../code/dialogs/connection-dialog.cpp:32 msgid "_Remote Endpoint:" msgstr "Servername:" #: ../code/dialogs/document-location-dialog.cpp:28 msgid "Document Name:" msgstr "Dokumentnamen:" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Select document's target location" msgstr "Zielverzeichnis des Dokumentes auswählen" #: ../code/dialogs/document-location-dialog.cpp:157 msgid "Choose a directory to create the document into:" msgstr "Wählen Sie das Verzeichnis, in dem das Dokument erstellt werden soll:" #: ../code/dialogs/document-location-dialog.cpp:163 msgid "Select documents' target location" msgstr "Zielverzeichnis der Dokumente auswählen" #: ../code/dialogs/document-location-dialog.cpp:165 msgid "Choose a directory to create the documents into:" msgstr "" "Wählen Sie das Verzeichnis, in dem die Dokumente erstellt werden sollen:" #: ../code/dialogs/find-dialog.cpp:44 ../code/dialogs/find-dialog.cpp:142 msgid "Find" msgstr "Suche" #: ../code/dialogs/find-dialog.cpp:47 msgid "_Search for:" msgstr "_Suche nach:" #: ../code/dialogs/find-dialog.cpp:49 msgid "Replace _with:" msgstr "Ersetze _mit:" #: ../code/dialogs/find-dialog.cpp:51 msgid "_Match case" msgstr "_Groß-/Kleinschreibung berücksichtigen" #: ../code/dialogs/find-dialog.cpp:52 msgid "Match _entire word only" msgstr "Nur vollständige Wörter berücksichtigen" #: ../code/dialogs/find-dialog.cpp:53 msgid "Search _backwards" msgstr "Rückwärts suchen" #: ../code/dialogs/find-dialog.cpp:54 msgid "Wra_p around" msgstr "Suche beim Erreichen des Endes am Anfang _fortsetzen" #: ../code/dialogs/find-dialog.cpp:100 msgid "Replace _All" msgstr "_Alle ersetzen" #: ../code/dialogs/find-dialog.cpp:102 msgid "_Replace" msgstr "_Ersetzen" #: ../code/dialogs/find-dialog.cpp:142 msgid "Replace" msgstr "Ersetzen" #: ../code/dialogs/find-dialog.cpp:161 ../code/dialogs/find-dialog.cpp:177 msgid "Phrase \"%1\" has not been found" msgstr "Der Ausdruck »%1« wurde nicht gefunden" #: ../code/dialogs/find-dialog.cpp:335 msgid "No occurrence has been replaced" msgstr "Es wurde keine Ersetzung vorgenommen" #: ../code/dialogs/find-dialog.cpp:341 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "%1 Treffer wurde ersetzt" msgstr[1] "%1 Treffer wurden ersetzt" #: ../code/dialogs/goto-dialog.cpp:26 msgid "Go to line" msgstr "Gehe zu Zeile" #: ../code/dialogs/goto-dialog.cpp:29 msgid "Line _number:" msgstr "Zeilen_nummer" #: ../code/dialogs/goto-dialog.cpp:50 msgid "Go To _Line" msgstr "Gehe zu _Zeile" #: ../code/dialogs/initial-dialog.cpp:76 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:99 #, fuzzy msgid "Failed to generate private key" msgstr "Entfernen des Eintrags »%1« fehlgeschlagen" #: ../code/dialogs/initial-dialog.cpp:102 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:141 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:144 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:198 msgid "Choose a user color" msgstr "Wählen Sie eine Benutzerfarbe" #: ../code/dialogs/initial-dialog.cpp:204 msgid "Welcome to Gobby" msgstr "Willkommen zu Gobby" #: ../code/dialogs/initial-dialog.cpp:216 msgid "" "Before we start, a few options need to be configured. You can later change " "them by choosing Edit ▸ Preferences from the menu." msgstr "" "Bevor Sie loslegen können, müssen noch einige Einstellungen vorgenommen " "werden. Sie können diese Einstellungen später unter Bearbeiten ▸ " "Einstellungen im Hauptmenü verändern." #: ../code/dialogs/initial-dialog.cpp:224 msgid "User Name" msgstr "Benutzername" #: ../code/dialogs/initial-dialog.cpp:226 msgid "Your name as shown to other users." msgstr "Ihr Name, wie er anderen Benutzern angezeigt wird." #: ../code/dialogs/initial-dialog.cpp:235 msgid "User Color" msgstr "Benutzerfarbe" #: ../code/dialogs/initial-dialog.cpp:237 msgid "The color with which text you have written is branded." msgstr "Die Farbe, in der von Ihnen geschriebener Text hervorgeheben wird." #: ../code/dialogs/initial-dialog.cpp:256 #, fuzzy msgid "Remote Connections" msgstr "Sichere Verbindung" #: ../code/dialogs/initial-dialog.cpp:262 #: ../code/dialogs/preferences-dialog.cpp:217 msgid "Allow remote users to edit local documents" msgstr "" #: ../code/dialogs/initial-dialog.cpp:268 msgid "Ask remote users for a password" msgstr "" #: ../code/dialogs/initial-dialog.cpp:273 #: ../code/dialogs/preferences-dialog.cpp:220 #, fuzzy msgid "Password:" msgstr "Server-Passwort:" #: ../code/dialogs/initial-dialog.cpp:297 msgid "No authentication (Not recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:304 msgid "" "Don't authenticate ourselves to remote users. Data transfer will be " "unencrypted." msgstr "" #: ../code/dialogs/initial-dialog.cpp:313 msgid "Create a self-signed certificate (Recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:321 msgid "" "It may take a minute or two until remote users can connect while the " "security certificate is being generated." msgstr "" #: ../code/dialogs/initial-dialog.cpp:331 msgid "Use an existing certificate (Expert option)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:338 msgid "" "Use an existing private key and certificate for authentication. The files " "must be in PEM format." msgstr "" #: ../code/dialogs/initial-dialog.cpp:347 #: ../code/dialogs/preferences-dialog.cpp:766 msgid "Private key:" msgstr "" #: ../code/dialogs/initial-dialog.cpp:349 #: ../code/dialogs/preferences-dialog.cpp:772 msgid "Certificate:" msgstr "" #: ../code/dialogs/open-location-dialog.cpp:26 msgid "Open Location" msgstr "Ort öffnen" #: ../code/dialogs/open-location-dialog.cpp:27 msgid "Enter the _location (URI) of the file you would like to open:" msgstr "Geben Sie den Ort (URI) der Datei ein, die Sie öffnen möchten:" #: ../code/dialogs/password-dialog.cpp:25 msgid "Password Required" msgstr "Passwort benötigt" #: ../code/dialogs/password-dialog.cpp:31 msgid "Connection to host \"%1\" requires a password." msgstr "Die Verbindung zum Server »%1« erfordert ein Passwort." #: ../code/dialogs/password-dialog.cpp:32 msgid "Invalid password for host \"%1\". Please try again." msgstr "Ungültiges Password für Server »%1«. Bitte versuchen Sie es erneut." #: ../code/dialogs/password-dialog.cpp:35 msgid "Server _Password:" msgstr "Server-Passwort:" #: ../code/dialogs/preferences-dialog.cpp:198 msgid "Settings" msgstr "Einstellungen" #: ../code/dialogs/preferences-dialog.cpp:199 #, fuzzy msgid "Remote Users" msgstr "Benutzerfarben zurücksetzen" #: ../code/dialogs/preferences-dialog.cpp:200 #, fuzzy msgid "Local Documents" msgstr "Neues Dokument" #: ../code/dialogs/preferences-dialog.cpp:202 msgid "User name:" msgstr "Benutzername:" #: ../code/dialogs/preferences-dialog.cpp:204 msgid "User color:" msgstr "Benutzerfarbe:" #: ../code/dialogs/preferences-dialog.cpp:206 msgid "Color intensity:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:208 msgid "Choose a new user color" msgstr "Neue Benutzerfarbe wählen" #: ../code/dialogs/preferences-dialog.cpp:209 msgid "Show cursors of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:210 msgid "Show selections of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:212 #, fuzzy msgid "Highlight current line of remote users" msgstr "Aktuelle Zeile hervorheben" #: ../code/dialogs/preferences-dialog.cpp:214 msgid "Indicate cursor position of remote users in the scrollbar" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:219 msgid "Require remote users to enter a password" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:222 msgid "Port:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:226 msgid "Remember local documents after Gobby restart" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:227 #, fuzzy msgid "Local documents directory:" msgstr "Sitzungsverzeichnis" #: ../code/dialogs/preferences-dialog.cpp:423 msgid "Tab Stops" msgstr "Tabulatoren" #: ../code/dialogs/preferences-dialog.cpp:424 msgid "Indentation" msgstr "Zeileneinrückung" #: ../code/dialogs/preferences-dialog.cpp:425 msgid "Home/End Behavior" msgstr "Pos1/Ende-Verhalten" #: ../code/dialogs/preferences-dialog.cpp:426 msgid "File Saving" msgstr "Datei speichern" #: ../code/dialogs/preferences-dialog.cpp:427 msgid "_Tab width:" msgstr "_Tabulatorbreite" #: ../code/dialogs/preferences-dialog.cpp:429 msgid "Insert _spaces instead of tabs" msgstr "_Leerzeichen statt Tabulatoren einfügen" #: ../code/dialogs/preferences-dialog.cpp:430 msgid "Enable automatic _indentation" msgstr "Automatische Zeileneinrückung aktivieren" #: ../code/dialogs/preferences-dialog.cpp:431 msgid "Smart _home/end" msgstr "Intelligentes Pos1/Ende" #: ../code/dialogs/preferences-dialog.cpp:432 msgid "Enable _automatic saving of documents" msgstr "Dokumente _automatische speichern" #: ../code/dialogs/preferences-dialog.cpp:434 msgid "Autosave interval in _minutes:" msgstr "Abstand in Minuten zwischen automatischem Speichern:" #: ../code/dialogs/preferences-dialog.cpp:455 msgid "" "With this option enabled, Home/End keys move to first/last character before " "going to the start/end of the line." msgstr "" "Ist diese Option aktiviert, bewegen die Pos1-/Ende-Taste den Cursor zum " "ersten/letzten Zeichen, bevor sie bis an den Zeilenanfang/das Zeilenende " "gehen." #: ../code/dialogs/preferences-dialog.cpp:525 msgid "Text Wrapping" msgstr "Textumbruch" #: ../code/dialogs/preferences-dialog.cpp:526 msgid "Line Numbers" msgstr "Zeilennummern" #: ../code/dialogs/preferences-dialog.cpp:527 msgid "Current Line" msgstr "Aktuelle Zeile" #: ../code/dialogs/preferences-dialog.cpp:528 msgid "Right Margin" msgstr "Rechter Rand" #: ../code/dialogs/preferences-dialog.cpp:529 msgid "Bracket Matching" msgstr "Klammernpaare" #: ../code/dialogs/preferences-dialog.cpp:530 msgid "Whitespace Display" msgstr "Leerraum" #: ../code/dialogs/preferences-dialog.cpp:531 msgid "Enable text wrapping" msgstr "Zeilenumbruch aktivieren" #: ../code/dialogs/preferences-dialog.cpp:532 msgid "Do not split words over two lines" msgstr "Wörter nicht getrennt über zwei Zeilen schreiben" #: ../code/dialogs/preferences-dialog.cpp:533 msgid "Display line numbers" msgstr "Zeilennummern anzeigen" #: ../code/dialogs/preferences-dialog.cpp:534 msgid "Highlight current line" msgstr "Aktuelle Zeile hervorheben" #: ../code/dialogs/preferences-dialog.cpp:535 msgid "Display right margin" msgstr "Rechter Rand anzeigen" #: ../code/dialogs/preferences-dialog.cpp:536 msgid "Right margin at column:" msgstr "Rechter Rand in Spalte:" #: ../code/dialogs/preferences-dialog.cpp:537 msgid "Highlight matching bracket" msgstr "Klammernpaare hervorheben" #: ../code/dialogs/preferences-dialog.cpp:589 msgid "Display no whitespace" msgstr "Leerräume nicht anzeigen" #: ../code/dialogs/preferences-dialog.cpp:592 msgid "Display spaces" msgstr "Leerzeichen anzeigen" #: ../code/dialogs/preferences-dialog.cpp:596 msgid "Display tabs" msgstr "Tabulatoren anzeigen" #: ../code/dialogs/preferences-dialog.cpp:600 msgid "Display tabs and spaces" msgstr "Tabulatoren und Leerzeichen anzeigen" #: ../code/dialogs/preferences-dialog.cpp:651 msgid "Toolbar" msgstr "Werkzeugleiste" #: ../code/dialogs/preferences-dialog.cpp:652 msgid "Font" msgstr "Schrift" #: ../code/dialogs/preferences-dialog.cpp:653 msgid "Color Scheme" msgstr "Farbschema" #: ../code/dialogs/preferences-dialog.cpp:661 msgid "Show text only" msgstr "Nur Text anzeigen" #: ../code/dialogs/preferences-dialog.cpp:663 msgid "Show icons only" msgstr "Nur Symbole anzeigen" #: ../code/dialogs/preferences-dialog.cpp:665 msgid "Show both icons and text" msgstr "Zeige Symbol und Text" #: ../code/dialogs/preferences-dialog.cpp:667 msgid "Show text besides icons" msgstr "Zeige Text neben dem Symbol" #: ../code/dialogs/preferences-dialog.cpp:756 msgid "Trusted CAs" msgstr "Vertrauenswürdige Zertifizierungsstellen" #: ../code/dialogs/preferences-dialog.cpp:757 msgid "Secure Connection" msgstr "Sichere Verbindung" #: ../code/dialogs/preferences-dialog.cpp:758 #, fuzzy msgid "Authentication" msgstr "Zeileneinrückung" #: ../code/dialogs/preferences-dialog.cpp:759 msgid "Select a file containing trusted CAs" msgstr "" "Wählen Sie eine Datei, die vertrauenswürdige Zertifizierungsstellen enthält" #: ../code/dialogs/preferences-dialog.cpp:764 #, fuzzy msgid "None" msgstr "_Keine" #: ../code/dialogs/preferences-dialog.cpp:765 msgid "Use a certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:767 msgid "Select a private key file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:769 #: ../code/dialogs/preferences-dialog.cpp:776 #, fuzzy msgid "Create New..." msgstr "Dokument erstellen…" #: ../code/dialogs/preferences-dialog.cpp:773 msgid "Select a certificate file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:801 msgid "Use TLS if possible" msgstr "Wenn möglich TLS-Verschlüsselung verwenden" #: ../code/dialogs/preferences-dialog.cpp:804 msgid "Always use TLS" msgstr "Immer TLS-Verschlüsselung verwenden" #: ../code/dialogs/preferences-dialog.cpp:892 msgid "Error reading file:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:916 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:948 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:966 msgid "Select a location for the generated certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:1068 msgid "Preferences" msgstr "Einstellungen" #: ../code/dialogs/preferences-dialog.cpp:1073 msgid "User" msgstr "Benutzer" #: ../code/dialogs/preferences-dialog.cpp:1074 msgid "Editor" msgstr "Textbearbeitung" #: ../code/dialogs/preferences-dialog.cpp:1075 msgid "View" msgstr "Ansicht" #: ../code/dialogs/preferences-dialog.cpp:1076 msgid "Appearance" msgstr "Erscheinungsbild" #: ../code/dialogs/preferences-dialog.cpp:1077 msgid "Security" msgstr "Sicherheit" #: ../code/main.cpp:194 msgid "Gobby options" msgstr "Gobby-Optionen" #: ../code/main.cpp:194 msgid "Options related to Gobby" msgstr "Optionen bezüglich Gobby" #: ../code/main.cpp:199 msgid "Display version information and exit" msgstr "Zeige Version von Gobby an" #: ../code/main.cpp:206 msgid "Also start a new Gobby instance when there is one running already" msgstr "Auch neue Gobby-Instanz starten, wenn bereits eine Instanz läuft" #: ../code/main.cpp:214 msgid "Connect to given host on startup, can be given multiple times" msgstr "" "Beim Programmstart zum angegebenen Server verbinden, Mehrfachnennung möglich" #: ../code/main.cpp:215 msgid "HOSTNAME" msgstr "SERVER" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "Eintrag »%1« wird entfernt…" #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "Entfernen des Eintrags »%1« fehlgeschlagen" #: ../code/operations/operation-export-html.cpp:168 #, c-format msgid "written by: %s" msgstr "geschrieben von: %s" #: ../code/operations/operation-export-html.cpp:241 msgid "" msgstr "" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:254 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "Dokument erstellt aus %1$s:%2$s am %3$s durch %4$s" #: ../code/operations/operation-export-html.cpp:395 msgid "Participants" msgstr "Teilnehmer" #: ../code/operations/operation-export-html.cpp:475 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "Exportiere Dokument »%1« nach »%2« als HTML…" #: ../code/operations/operation-export-html.cpp:536 msgid "Failed to export document \"%1\" to HTML" msgstr "Exportieren des Dokuments »%1« zu HTML fehlgeschlagen" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "Erstelle Verzeichnis »%1«…" #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "Erstelle Dokument »%1«…" #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "Erstellen des Verzeichnisses »%1« fehlgeschlagen" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "Erstellen des Dokuments »%1« fehlgeschlagen" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "ISO-8859-15" #: ../code/operations/operation-open.cpp:114 msgid "Opening document \"%1\"..." msgstr "Dokument »%1« wird geöffnet…" #: ../code/operations/operation-open.cpp:134 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "" "Das Verzeichnis, in das das neue Dokument eingefügt werden sollte, wurde " "entfernt" #: ../code/operations/operation-open.cpp:323 msgid "The file contains data not in the specified encoding" msgstr "" "Die Datei enthält Daten, die nicht dem angegebenen Zeichensatz entsprechen" #: ../code/operations/operation-open.cpp:334 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "" "Die Datei enthält entweder Text aus einem unbekannten Zeichensatz oder " "Binärdaten" #: ../code/operations/operation-open-multiple.cpp:91 msgid "Parent folder was removed" msgstr "Enthaltender Ordner wurde entfernt" #: ../code/operations/operation-open-multiple.cpp:193 msgid "Failed to open multiple documents" msgstr "Öffnen mehrerer Dokumente fehlgeschlagen" #: ../code/operations/operation-save.cpp:97 msgid "Saving document \"%1\" to \"%2\"..." msgstr "Speichere Dokument »%1« nach »%2«…" #: ../code/operations/operation-save.cpp:226 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" "Das Dokument enthält ein oder mehrere Zeichen, die mit dem aktuellen " "Zeichensatz nicht dargestellt werden können." #: ../code/operations/operation-save.cpp:287 msgid "Failed to save document \"%1\"" msgstr "Speichern des Dokuments »%1« fehlgeschlagen" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "Öffnen des Dokuments fehlschlagen »%1«" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 #, fuzzy msgid "Subscribing to \"%1\"..." msgstr "Anmeldung bei %1…" #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "Erstellen des Verzeichnisses »%1« fehlgeschlagen" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "Verbindung zu »%1« fehlgeschlagen" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 #, fuzzy msgid "Could not subscribe to \"%1\"" msgstr "Auflösung von »%1« fehlgeschlagen" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "Schnittstelle »%1« existiert nicht" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "Erstellen des Verzeichnisses »%1« fehlgeschlagen: %2" #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "Schnittstelle »%1« existiert nicht" #: ../code/window.cpp:104 msgid "This Computer" msgstr "" #: ../code/window.cpp:129 msgid "Document Browser" msgstr "Dokumentenliste" #: ../code/window.cpp:182 msgid "You are still connected to a session" msgstr "Sie sind noch in einer Sitzung" #: ../code/window.cpp:190 msgid "Do you want to close Gobby nevertheless?" msgstr "Wollen Sie Gobby dennoch schließen?" #: ../code/window.cpp:196 msgid "C_ancel" msgstr "_Abbrechen" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "Gobby" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "Gemeinschaftlicher Editor" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "Gobby Gemeinschaftlicher Editor (0.5)" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "Textdateien gemeinsam bearbeiten" #~ msgid "" #~ "This program is free software; you can redistribute it and/or modify it " #~ "under the terms of the GNU General Public License as published by the " #~ "Free Software Foundation; either version 2 of the License, or (at your " #~ "option) any later version.\n" #~ "\n" #~ "This program is distributed in the hope that it will be useful, but " #~ "WITHOUT ANY WARRANTY; without even the implied warranty of " #~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General " #~ "Public License for more details.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgstr "" #~ "Dieses Programm ist freie Software. Sie können es unter den Bedingungen " #~ "der GNU General Public License, wie von der Free Software Foundation " #~ "veröffentlicht, weitergeben und/oder modifizieren, entweder gemäß Version " #~ "2 der Lizenz oder (nach Ihrer Option) jeder späteren Version.\n" #~ "\n" #~ "Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es " #~ "Ihnen von Nutzen sein wird, aber OHNE IRGENDEINE GARANTIE, sogar ohne die " #~ "implizite Garantie der MARKTREIFE oder der VERWENDBARKEIT FÜR EINEN " #~ "BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License.\n" #~ "\n" #~ "Sie sollten ein Exemplar der GNU General Public License zusammen mit " #~ "diesem Programm erhalten haben. Falls nicht, schreiben Sie an die Free " #~ "Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, " #~ "USA." #~ msgid "User Join in progress..." #~ msgstr "Benutzerbeitritt wird bearbeitet…" #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "Auflösung von »%1« fehlgeschlagen" #~ msgid "Resolving \"%1\"..." #~ msgstr "Löse »%1« auf…" #~ msgid "Paths" #~ msgstr "Pfade" #~ msgid "" #~ "The directory into which locally hosted sessions are permanently stored" #~ msgstr "" #~ "Verzeichnis zur permanenten Aufbewahrung veröffentlichter Dokuemente" #~ msgid "Subscription already in progress" #~ msgstr "Anmeldung läuft bereits" gobby-0.5.0/po/en_GB.po0000644000175000017500000011153412376151303011475 00000000000000# British English translation for Gobby, the collaborative real-time text # editor. # Copyright (C) 2009 Gabríel A. Pétursson # This file is distributed under the same license as the Gobby package. # Gabríel A. Pétursson , 2009. # msgid "" msgstr "" "Project-Id-Version: gobby-0.4.93~dev\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-08-23 13:43-0400\n" "PO-Revision-Date: 2009-12-03 19:26-0000\n" "Last-Translator: Gabríel A. Pétursson \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n!=1;\n" #: ../code/commands/auth-commands.cpp:196 #, fuzzy msgid "Password required" msgstr "Password Required" #: ../code/commands/auth-commands.cpp:214 msgid "Incorrect password" msgstr "" #: ../code/commands/browser-commands.cpp:288 msgid "Subscribing to %1..." msgstr "Subscribing to %1..." #: ../code/commands/browser-commands.cpp:301 msgid "Subscribing to chat on %1..." msgstr "Subscribing to chat on %1..." #: ../code/commands/browser-commands.cpp:591 msgid "Subscription failed" msgstr "Subscription failed" #: ../code/commands/browser-context-commands.cpp:86 msgid "Could not find a location where to store the certificate" msgstr "" #: ../code/commands/browser-context-commands.cpp:153 msgid "_Remove" msgstr "" #: ../code/commands/browser-context-commands.cpp:188 #, fuzzy msgid "_Disconnect from Server" msgstr "Connect to Server" #: ../code/commands/browser-context-commands.cpp:220 #, fuzzy msgid "Create _Account..." msgstr "Create Do_cument..." #: ../code/commands/browser-context-commands.cpp:245 msgid "Create Do_cument..." msgstr "Create Do_cument..." #: ../code/commands/browser-context-commands.cpp:280 #, fuzzy msgid "Create Di_rectory..." msgstr "Create Directory..." #: ../code/commands/browser-context-commands.cpp:293 msgid "_Open Document..." msgstr "_Open Document..." #: ../code/commands/browser-context-commands.cpp:312 msgid "_Permissions..." msgstr "" #: ../code/commands/browser-context-commands.cpp:324 msgid "D_elete" msgstr "D_elete" #: ../code/commands/browser-context-commands.cpp:405 msgid "Choose a name for the directory" msgstr "Choose a name for the directory" #: ../code/commands/browser-context-commands.cpp:406 msgid "Choose a name for the document" msgstr "Choose a name for the document" #: ../code/commands/browser-context-commands.cpp:407 msgid "_Directory Name:" msgstr "_Directory Name:" #: ../code/commands/browser-context-commands.cpp:408 msgid "_Document Name:" msgstr "_Document Name:" #: ../code/commands/browser-context-commands.cpp:411 msgid "C_reate" msgstr "C_reate" #: ../code/commands/browser-context-commands.cpp:415 msgid "New Directory" msgstr "New Directory" #: ../code/commands/browser-context-commands.cpp:416 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "New Document" #: ../code/commands/browser-context-commands.cpp:436 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "Choose a text file to open" #: ../code/commands/browser-context-commands.cpp:558 #: ../code/commands/browser-context-commands.cpp:569 msgid "Account successfully created" msgstr "" #: ../code/commands/browser-context-commands.cpp:562 msgid "When re-connecting to the server, the new account will be used." msgstr "" #: ../code/commands/browser-context-commands.cpp:573 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:586 #, fuzzy msgid "Failed to create account" msgstr "Failed to create document \"%1\"" #: ../code/commands/browser-context-commands.cpp:589 msgid "Could not save the certificate for the account: %1" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "Choose a location to export document \"%1\" to" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "Querying \"%1\"..." #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:474 #: ../code/operations/operation-open-multiple.cpp:180 msgid "Failed to open document \"%1\"" msgstr "Failed to open document \"%1\"" #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "Choose a location to save document \"%1\" to" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:70 msgid "There was an error displaying help." msgstr "There was an error displaying help." #: ../code/commands/help-commands.cpp:93 msgid "Contributors:" msgstr "Contributors:" #: ../code/commands/help-commands.cpp:99 msgid "British English:" msgstr "British English:" #: ../code/commands/help-commands.cpp:101 msgid "German:" msgstr "German:" #: ../code/commands/help-commands.cpp:118 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronised to others any longer, " "therefore the document cannot be edited any longer.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "Synchronisation in progress... %1%%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "This document cannot be used." #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) in order for us to fix the problem in a " "later version. Thank you." #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "Synchronisation failed: %1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" "You can still watch others editing the document, but you cannot edit it " "yourself." #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "User Join failed: %1" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:111 msgid "_Direct Connection" msgstr "_Direct Connection" #: ../code/core/browser.cpp:113 msgid "Host Name:" msgstr "Host Name:" #: ../code/core/certificatemanager.cpp:83 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:276 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:338 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:414 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/foldermanager.cpp:322 msgid "The document has been removed from the server." msgstr "" #: ../code/core/header.cpp:203 msgid "_None" msgstr "_None" #: ../code/core/header.cpp:227 msgid "_File" msgstr "_File" #: ../code/core/header.cpp:230 msgid "_Open..." msgstr "_Open..." #: ../code/core/header.cpp:233 msgid "Open _Location..." msgstr "Open _Location..." #: ../code/core/header.cpp:237 msgid "Save _As..." msgstr "Save _As..." #: ../code/core/header.cpp:241 ../code/core/iconmanager.cpp:43 msgid "Save All" msgstr "Save All" #: ../code/core/header.cpp:241 msgid "Save all open files locally" msgstr "Save all open files locally" #: ../code/core/header.cpp:243 msgid "Export As _HTML..." msgstr "Export As _HTML..." #: ../code/core/header.cpp:246 msgid "Connect _to Server..." msgstr "Connect _to Server..." #: ../code/core/header.cpp:251 msgid "_Edit" msgstr "_Edit" #: ../code/core/header.cpp:259 msgid "_Find..." msgstr "_Find..." #: ../code/core/header.cpp:261 msgid "Find Ne_xt" msgstr "Find Ne_xt" #: ../code/core/header.cpp:262 msgid "Find next match of phrase searched for" msgstr "Find next match of phrase searched for" #: ../code/core/header.cpp:265 msgid "Find Pre_vious" msgstr "Find Pre_vious" #: ../code/core/header.cpp:266 msgid "Find previous match of phrase searched for" msgstr "Find previous match of phrase searched for" #: ../code/core/header.cpp:271 msgid "Find and Rep_lace..." msgstr "Find and Rep_lace..." #: ../code/core/header.cpp:275 msgid "Go to _Line..." msgstr "Go to _Line..." #: ../code/core/header.cpp:279 msgid "Pr_eferences..." msgstr "Pr_eferences..." #: ../code/core/header.cpp:281 msgid "_View" msgstr "_View" #: ../code/core/header.cpp:284 msgid "Reset User Colors" msgstr "Reset User Colours" #: ../code/core/header.cpp:285 msgid "Hide user colors in current document" msgstr "Hide user colours in current document" #: ../code/core/header.cpp:289 msgid "Fullscreen" msgstr "" #: ../code/core/header.cpp:290 msgid "Show the editing window in fullscreen mode" msgstr "" #: ../code/core/header.cpp:294 msgid "Zoom In" msgstr "" #: ../code/core/header.cpp:297 msgid "Zoom Out" msgstr "" #: ../code/core/header.cpp:300 msgid "View Toolbar" msgstr "View Toolbar" #: ../code/core/header.cpp:301 msgid "Whether to show the toolbar" msgstr "Whether to show the toolbar" #: ../code/core/header.cpp:305 msgid "View Statusbar" msgstr "View Statusbar" #: ../code/core/header.cpp:306 msgid "Whether to show the statusbar" msgstr "Whether to show the statusbar" #: ../code/core/header.cpp:310 msgid "View Document Browser" msgstr "View Document Browser" #: ../code/core/header.cpp:311 msgid "Whether to show the document browser" msgstr "Whether to show the document browser" #: ../code/core/header.cpp:315 msgid "View Chat" msgstr "View Chat" #: ../code/core/header.cpp:316 msgid "Whether to show the chat pane" msgstr "Whether to show the chat pane" #: ../code/core/header.cpp:320 msgid "View Document User List" msgstr "View Document User List" #: ../code/core/header.cpp:321 msgid "Whether to show the user list for documents" msgstr "Whether to show the user list for documents" #: ../code/core/header.cpp:325 msgid "View Chat User List" msgstr "View Chat User List" #: ../code/core/header.cpp:326 msgid "Whether to show the user list for the chat" msgstr "Whether to show the user list for the chat" #: ../code/core/header.cpp:330 msgid "_Highlight Mode" msgstr "_Highlight Mode" #: ../code/core/header.cpp:336 msgid "_Help" msgstr "_Help" #: ../code/core/header.cpp:339 msgid "_Contents" msgstr "_Contents" #: ../code/core/header.cpp:340 msgid "Opens the Gobby manual" msgstr "Opens the Gobby manual" #: ../code/core/header.cpp:343 msgid "_About..." msgstr "_About..." #: ../code/core/header.cpp:344 msgid "Shows Gobby's copyright and credits" msgstr "Shows Gobby's copyright and credits" #: ../code/core/iconmanager.cpp:49 msgid "User list" msgstr "User list" #: ../code/core/iconmanager.cpp:55 msgid "Document list" msgstr "Document list" #: ../code/core/iconmanager.cpp:61 ../code/window.cpp:52 msgid "Chat" msgstr "Chat" #: ../code/core/iconmanager.cpp:68 msgid "User Color Indicator" msgstr "User Colour Indicator" #: ../code/core/selfhoster.cpp:103 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:135 #, fuzzy msgid "Failed to generate Diffie-Hellman parameters" msgstr "Failed to delete node \"%1\"" #: ../code/core/selfhoster.cpp:137 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:262 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:282 #, fuzzy msgid "Failed to share documents" msgstr "Failed to save document \"%1\"" #: ../code/core/sessionuserview.cpp:39 msgid "User List" msgstr "User List" #: ../code/core/statusbar.cpp:418 msgid "Ln %1, Col %2\t%3" msgstr "Ln %1, Col %2\t%3" #: ../code/core/statusbar.cpp:421 msgid "OVR" msgstr "OVR" #: ../code/core/statusbar.cpp:421 msgid "INS" msgstr "INS" #: ../code/core/textsessionview.cpp:638 msgid "Text written by %1" msgstr "Text written by %1" #: ../code/core/textsessionview.cpp:644 msgid "Unowned text" msgstr "Ownerless text" #: ../code/core/userlist.cpp:108 msgid "Users" msgstr "Users" #: ../code/dialogs/connection-dialog.cpp:26 msgid "Connect to Server" msgstr "Connect to Server" #: ../code/dialogs/connection-dialog.cpp:30 msgid "Please enter a host name with which to establish a connection." msgstr "Please enter a host name with which to establish a connection." #: ../code/dialogs/connection-dialog.cpp:32 msgid "_Remote Endpoint:" msgstr "_Remote Endpoint:" #: ../code/dialogs/document-location-dialog.cpp:28 msgid "Document Name:" msgstr "Document Name:" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Select document's target location" msgstr "Select document's target location" #: ../code/dialogs/document-location-dialog.cpp:157 msgid "Choose a directory to create the document into:" msgstr "Choose a directory to create the document into:" #: ../code/dialogs/document-location-dialog.cpp:163 msgid "Select documents' target location" msgstr "Select documents' target location" #: ../code/dialogs/document-location-dialog.cpp:165 msgid "Choose a directory to create the documents into:" msgstr "Choose a directory to create the documents into:" #: ../code/dialogs/find-dialog.cpp:44 ../code/dialogs/find-dialog.cpp:142 msgid "Find" msgstr "Find" #: ../code/dialogs/find-dialog.cpp:47 msgid "_Search for:" msgstr "_Search for:" #: ../code/dialogs/find-dialog.cpp:49 msgid "Replace _with:" msgstr "Replace _with:" #: ../code/dialogs/find-dialog.cpp:51 msgid "_Match case" msgstr "_Match case" #: ../code/dialogs/find-dialog.cpp:52 msgid "Match _entire word only" msgstr "Match _entire word only" #: ../code/dialogs/find-dialog.cpp:53 msgid "Search _backwards" msgstr "Search _backwards" #: ../code/dialogs/find-dialog.cpp:54 msgid "Wra_p around" msgstr "Wra_p around" #: ../code/dialogs/find-dialog.cpp:100 msgid "Replace _All" msgstr "Replace _All" #: ../code/dialogs/find-dialog.cpp:102 msgid "_Replace" msgstr "_Replace" #: ../code/dialogs/find-dialog.cpp:142 msgid "Replace" msgstr "Replace" #: ../code/dialogs/find-dialog.cpp:161 ../code/dialogs/find-dialog.cpp:177 msgid "Phrase \"%1\" has not been found" msgstr "Phrase \"%1\" has not been found" #: ../code/dialogs/find-dialog.cpp:335 msgid "No occurrence has been replaced" msgstr "No occurrence has been replaced" #: ../code/dialogs/find-dialog.cpp:341 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "%1 occurrence has been replaced" msgstr[1] "%1 occurrences have been replaced" #: ../code/dialogs/goto-dialog.cpp:26 msgid "Go to line" msgstr "Go to line" #: ../code/dialogs/goto-dialog.cpp:29 msgid "Line _number:" msgstr "Line _number:" #: ../code/dialogs/goto-dialog.cpp:50 msgid "Go To _Line" msgstr "Go To _Line" #: ../code/dialogs/initial-dialog.cpp:76 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:99 #, fuzzy msgid "Failed to generate private key" msgstr "Failed to delete node \"%1\"" #: ../code/dialogs/initial-dialog.cpp:102 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:141 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:144 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:198 msgid "Choose a user color" msgstr "Choose a user colour" #: ../code/dialogs/initial-dialog.cpp:204 msgid "Welcome to Gobby" msgstr "Welcome to Gobby" #: ../code/dialogs/initial-dialog.cpp:216 msgid "" "Before we start, a few options need to be configured. You can later change " "them by choosing Edit ▸ Preferences from the menu." msgstr "" "Before we start, a few options need to be configured. You can later change " "them by choosing Edit ▸ Preferences from the menu." #: ../code/dialogs/initial-dialog.cpp:224 msgid "User Name" msgstr "User Name" #: ../code/dialogs/initial-dialog.cpp:226 msgid "Your name as shown to other users." msgstr "Your name as shown to other users." #: ../code/dialogs/initial-dialog.cpp:235 msgid "User Color" msgstr "User Colour" #: ../code/dialogs/initial-dialog.cpp:237 msgid "The color with which text you have written is branded." msgstr "The colour with which text you have written is branded." #: ../code/dialogs/initial-dialog.cpp:256 #, fuzzy msgid "Remote Connections" msgstr "Secure Connection" #: ../code/dialogs/initial-dialog.cpp:262 #: ../code/dialogs/preferences-dialog.cpp:217 msgid "Allow remote users to edit local documents" msgstr "" #: ../code/dialogs/initial-dialog.cpp:268 msgid "Ask remote users for a password" msgstr "" #: ../code/dialogs/initial-dialog.cpp:273 #: ../code/dialogs/preferences-dialog.cpp:220 #, fuzzy msgid "Password:" msgstr "Server _Password:" #: ../code/dialogs/initial-dialog.cpp:297 msgid "No authentication (Not recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:304 msgid "" "Don't authenticate ourselves to remote users. Data transfer will be " "unencrypted." msgstr "" #: ../code/dialogs/initial-dialog.cpp:313 msgid "Create a self-signed certificate (Recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:321 msgid "" "It may take a minute or two until remote users can connect while the " "security certificate is being generated." msgstr "" #: ../code/dialogs/initial-dialog.cpp:331 msgid "Use an existing certificate (Expert option)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:338 msgid "" "Use an existing private key and certificate for authentication. The files " "must be in PEM format." msgstr "" #: ../code/dialogs/initial-dialog.cpp:347 #: ../code/dialogs/preferences-dialog.cpp:766 msgid "Private key:" msgstr "" #: ../code/dialogs/initial-dialog.cpp:349 #: ../code/dialogs/preferences-dialog.cpp:772 msgid "Certificate:" msgstr "" #: ../code/dialogs/open-location-dialog.cpp:26 msgid "Open Location" msgstr "Open Location" #: ../code/dialogs/open-location-dialog.cpp:27 msgid "Enter the _location (URI) of the file you would like to open:" msgstr "Enter the _location (URI) of the file you would like to open:" #: ../code/dialogs/password-dialog.cpp:25 msgid "Password Required" msgstr "Password Required" #: ../code/dialogs/password-dialog.cpp:31 msgid "Connection to host \"%1\" requires a password." msgstr "Connection to host \"%1\" requires a password." #: ../code/dialogs/password-dialog.cpp:32 msgid "Invalid password for host \"%1\". Please try again." msgstr "Invalid password for host \"%1\". Please try again." #: ../code/dialogs/password-dialog.cpp:35 msgid "Server _Password:" msgstr "Server _Password:" #: ../code/dialogs/preferences-dialog.cpp:198 msgid "Settings" msgstr "Settings" #: ../code/dialogs/preferences-dialog.cpp:199 #, fuzzy msgid "Remote Users" msgstr "Reset User Colours" #: ../code/dialogs/preferences-dialog.cpp:200 #, fuzzy msgid "Local Documents" msgstr "New Document" #: ../code/dialogs/preferences-dialog.cpp:202 msgid "User name:" msgstr "User name:" #: ../code/dialogs/preferences-dialog.cpp:204 msgid "User color:" msgstr "User colour:" #: ../code/dialogs/preferences-dialog.cpp:206 msgid "Color intensity:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:208 msgid "Choose a new user color" msgstr "Choose a new user colour" #: ../code/dialogs/preferences-dialog.cpp:209 msgid "Show cursors of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:210 msgid "Show selections of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:212 #, fuzzy msgid "Highlight current line of remote users" msgstr "Highlight current line" #: ../code/dialogs/preferences-dialog.cpp:214 msgid "Indicate cursor position of remote users in the scrollbar" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:219 msgid "Require remote users to enter a password" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:222 msgid "Port:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:226 msgid "Remember local documents after Gobby restart" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:227 #, fuzzy msgid "Local documents directory:" msgstr "Host directory:" #: ../code/dialogs/preferences-dialog.cpp:423 msgid "Tab Stops" msgstr "Tab Stops" #: ../code/dialogs/preferences-dialog.cpp:424 msgid "Indentation" msgstr "Indentation" #: ../code/dialogs/preferences-dialog.cpp:425 msgid "Home/End Behavior" msgstr "Home/End Behaviour" #: ../code/dialogs/preferences-dialog.cpp:426 msgid "File Saving" msgstr "File Saving" #: ../code/dialogs/preferences-dialog.cpp:427 msgid "_Tab width:" msgstr "_Tab width:" #: ../code/dialogs/preferences-dialog.cpp:429 msgid "Insert _spaces instead of tabs" msgstr "Insert _spaces instead of tabs" #: ../code/dialogs/preferences-dialog.cpp:430 msgid "Enable automatic _indentation" msgstr "Enable automatic _indentation" #: ../code/dialogs/preferences-dialog.cpp:431 msgid "Smart _home/end" msgstr "Smart _home/end" #: ../code/dialogs/preferences-dialog.cpp:432 msgid "Enable _automatic saving of documents" msgstr "Enable _automatic saving of documents" #: ../code/dialogs/preferences-dialog.cpp:434 msgid "Autosave interval in _minutes:" msgstr "Autosave interval in _minutes:" #: ../code/dialogs/preferences-dialog.cpp:455 msgid "" "With this option enabled, Home/End keys move to first/last character before " "going to the start/end of the line." msgstr "" "With this option enabled, Home/End keys move to first/last character before " "going to the start/end of the line." #: ../code/dialogs/preferences-dialog.cpp:525 msgid "Text Wrapping" msgstr "Text Wrapping" #: ../code/dialogs/preferences-dialog.cpp:526 msgid "Line Numbers" msgstr "Line Numbers" #: ../code/dialogs/preferences-dialog.cpp:527 msgid "Current Line" msgstr "Current Line" #: ../code/dialogs/preferences-dialog.cpp:528 msgid "Right Margin" msgstr "Right Margin" #: ../code/dialogs/preferences-dialog.cpp:529 msgid "Bracket Matching" msgstr "Bracket Matching" #: ../code/dialogs/preferences-dialog.cpp:530 msgid "Whitespace Display" msgstr "Whitespace Display" #: ../code/dialogs/preferences-dialog.cpp:531 msgid "Enable text wrapping" msgstr "Enable text wrapping" #: ../code/dialogs/preferences-dialog.cpp:532 msgid "Do not split words over two lines" msgstr "Do not split words over two lines" #: ../code/dialogs/preferences-dialog.cpp:533 msgid "Display line numbers" msgstr "Display line numbers" #: ../code/dialogs/preferences-dialog.cpp:534 msgid "Highlight current line" msgstr "Highlight current line" #: ../code/dialogs/preferences-dialog.cpp:535 msgid "Display right margin" msgstr "Display right margin" #: ../code/dialogs/preferences-dialog.cpp:536 msgid "Right margin at column:" msgstr "Right margin at column:" #: ../code/dialogs/preferences-dialog.cpp:537 msgid "Highlight matching bracket" msgstr "Highlight matching bracket" #: ../code/dialogs/preferences-dialog.cpp:589 msgid "Display no whitespace" msgstr "Display no whitespace" #: ../code/dialogs/preferences-dialog.cpp:592 msgid "Display spaces" msgstr "Display spaces" #: ../code/dialogs/preferences-dialog.cpp:596 msgid "Display tabs" msgstr "Display tabs" #: ../code/dialogs/preferences-dialog.cpp:600 msgid "Display tabs and spaces" msgstr "Display tabs and spaces" #: ../code/dialogs/preferences-dialog.cpp:651 msgid "Toolbar" msgstr "Toolbar" #: ../code/dialogs/preferences-dialog.cpp:652 msgid "Font" msgstr "Font" #: ../code/dialogs/preferences-dialog.cpp:653 msgid "Color Scheme" msgstr "Colour Scheme" #: ../code/dialogs/preferences-dialog.cpp:661 msgid "Show text only" msgstr "Show text only" #: ../code/dialogs/preferences-dialog.cpp:663 msgid "Show icons only" msgstr "Show icons only" #: ../code/dialogs/preferences-dialog.cpp:665 msgid "Show both icons and text" msgstr "Show both icons and text" #: ../code/dialogs/preferences-dialog.cpp:667 msgid "Show text besides icons" msgstr "Show text besides icons" #: ../code/dialogs/preferences-dialog.cpp:756 msgid "Trusted CAs" msgstr "Trusted CAs" #: ../code/dialogs/preferences-dialog.cpp:757 msgid "Secure Connection" msgstr "Secure Connection" #: ../code/dialogs/preferences-dialog.cpp:758 #, fuzzy msgid "Authentication" msgstr "Indentation" #: ../code/dialogs/preferences-dialog.cpp:759 msgid "Select a file containing trusted CAs" msgstr "Select a file containing trusted CAs" #: ../code/dialogs/preferences-dialog.cpp:764 #, fuzzy msgid "None" msgstr "_None" #: ../code/dialogs/preferences-dialog.cpp:765 msgid "Use a certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:767 msgid "Select a private key file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:769 #: ../code/dialogs/preferences-dialog.cpp:776 #, fuzzy msgid "Create New..." msgstr "Create Do_cument..." #: ../code/dialogs/preferences-dialog.cpp:773 msgid "Select a certificate file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:801 msgid "Use TLS if possible" msgstr "Use TLS where possible" #: ../code/dialogs/preferences-dialog.cpp:804 msgid "Always use TLS" msgstr "Always use TLS" #: ../code/dialogs/preferences-dialog.cpp:892 msgid "Error reading file:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:916 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:948 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:966 msgid "Select a location for the generated certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:1068 msgid "Preferences" msgstr "Preferences" #: ../code/dialogs/preferences-dialog.cpp:1073 msgid "User" msgstr "User" #: ../code/dialogs/preferences-dialog.cpp:1074 msgid "Editor" msgstr "Editor" #: ../code/dialogs/preferences-dialog.cpp:1075 msgid "View" msgstr "View" #: ../code/dialogs/preferences-dialog.cpp:1076 msgid "Appearance" msgstr "Appearance" #: ../code/dialogs/preferences-dialog.cpp:1077 msgid "Security" msgstr "Security" #: ../code/main.cpp:194 msgid "Gobby options" msgstr "Gobby options" #: ../code/main.cpp:194 msgid "Options related to Gobby" msgstr "Options related to Gobby" #: ../code/main.cpp:199 msgid "Display version information and exit" msgstr "Display version information and exit" #: ../code/main.cpp:206 msgid "Also start a new Gobby instance when there is one running already" msgstr "Also start a new Gobby instance when there is one running already" #: ../code/main.cpp:214 msgid "Connect to given host on startup, can be given multiple times" msgstr "Connect to given host on startup, can be given multiple times" #: ../code/main.cpp:215 msgid "HOSTNAME" msgstr "HOSTNAME" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "Removing node \"%1\"..." #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "Failed to delete node \"%1\"" #: ../code/operations/operation-export-html.cpp:168 #, c-format msgid "written by: %s" msgstr "written by: %s" #: ../code/operations/operation-export-html.cpp:241 msgid "" msgstr "" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:254 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "Document generated from %1$s:%2$s at %3$s by %4$s" #: ../code/operations/operation-export-html.cpp:395 msgid "Participants" msgstr "Participants" #: ../code/operations/operation-export-html.cpp:475 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "Exporting document \"%1\" to \"%2\" in HTML..." #: ../code/operations/operation-export-html.cpp:536 msgid "Failed to export document \"%1\" to HTML" msgstr "Failed to export document \"%1\" to HTML" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "Creating directory \"%1\"..." #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "Creating document \"%1\"..." #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "Failed to create directory \"%1\"" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "Failed to create document \"%1\"" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "ISO-8859-1" #: ../code/operations/operation-open.cpp:114 msgid "Opening document \"%1\"..." msgstr "Opening document \"%1\"..." #: ../code/operations/operation-open.cpp:134 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "" "The directory into which the new document was supposed to be inserted has " "been removed" #: ../code/operations/operation-open.cpp:323 msgid "The file contains data not in the specified encoding" msgstr "The file contains data not in the specified encoding" #: ../code/operations/operation-open.cpp:334 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "" "The file either contains data in an unknown encoding, or it contains binary " "data." #: ../code/operations/operation-open-multiple.cpp:91 msgid "Parent folder was removed" msgstr "Parent folder was removed" #: ../code/operations/operation-open-multiple.cpp:193 msgid "Failed to open multiple documents" msgstr "Failed to open multiple documents" #: ../code/operations/operation-save.cpp:97 msgid "Saving document \"%1\" to \"%2\"..." msgstr "Saving document \"%1\" to \"%2\"..." #: ../code/operations/operation-save.cpp:226 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." #: ../code/operations/operation-save.cpp:287 msgid "Failed to save document \"%1\"" msgstr "Failed to save document \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "Failed to open document \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 #, fuzzy msgid "Subscribing to \"%1\"..." msgstr "Subscribing to %1..." #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "Failed to create directory \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "Connection to \"%1\" failed" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 #, fuzzy msgid "Could not subscribe to \"%1\"" msgstr "Could not resolve \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "Device \"%1\" does not exist" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "Could not create directory \"%1\": %2" #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "Device \"%1\" does not exist" #: ../code/window.cpp:104 msgid "This Computer" msgstr "" #: ../code/window.cpp:129 msgid "Document Browser" msgstr "Document Browser" #: ../code/window.cpp:182 msgid "You are still connected to a session" msgstr "You are still connected to a session" #: ../code/window.cpp:190 msgid "Do you want to close Gobby nevertheless?" msgstr "Do you want to close Gobby nevertheless?" #: ../code/window.cpp:196 msgid "C_ancel" msgstr "C_ancel" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "Gobby" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "Collaborative Editor" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "Gobby Collaborative Editor (0.5)" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "Edit text files collaboratively" #~ msgid "" #~ "This program is free software; you can redistribute it and/or modify it " #~ "under the terms of the GNU General Public License as published by the " #~ "Free Software Foundation; either version 2 of the License, or (at your " #~ "option) any later version.\n" #~ "\n" #~ "This program is distributed in the hope that it will be useful, but " #~ "WITHOUT ANY WARRANTY; without even the implied warranty of " #~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General " #~ "Public License for more details.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgstr "" #~ "This program is free software; you can redistribute it and/or modify it " #~ "under the terms of the GNU General Public License as published by the " #~ "Free Software Foundation; either version 2 of the License, or (at your " #~ "option) any later version.\n" #~ "\n" #~ "This program is distributed in the hope that it will be useful, but " #~ "WITHOUT ANY WARRANTY; without even the implied warranty of " #~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General " #~ "Public License for more details.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgid "User Join in progress..." #~ msgstr "User Join in progress..." #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "Could not resolve \"%1\"" #~ msgid "Resolving \"%1\"..." #~ msgstr "Resolving \"%1\"..." #~ msgid "Paths" #~ msgstr "Paths" #~ msgid "" #~ "The directory into which locally hosted sessions are permanently stored" #~ msgstr "" #~ "The directory into which locally hosted sessions are permanently stored" #, fuzzy #~ msgid "Subscription already in progress" #~ msgstr "Subscription failed" #, fuzzy #~ msgid "Whether to show the user list" #~ msgstr "Whether to show the user list for the chat" gobby-0.5.0/po/ca.po0000644000175000017500000013047112376151302011106 00000000000000# Catalan translation of Gobby. # Copyright © 2012 Free Software Foundation, Inc. # This file is distributed under the same license as the gobby package. # Jordi Mallach , 2012. # msgid "" msgstr "" "Project-Id-Version: gobby 0.4.94\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-08-23 13:43-0400\n" "PO-Revision-Date: 2012-12-04 18:12+0100\n" "Last-Translator: Jordi Mallach \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n!=1;\n" #: ../code/commands/auth-commands.cpp:196 #, fuzzy msgid "Password required" msgstr "Es requereix una contrasenya per a la sessió" #: ../code/commands/auth-commands.cpp:214 #, fuzzy msgid "Incorrect password" msgstr "Estableix una contrasenya…" #: ../code/commands/browser-commands.cpp:288 msgid "Subscribing to %1..." msgstr "" #: ../code/commands/browser-commands.cpp:301 msgid "Subscribing to chat on %1..." msgstr "" #: ../code/commands/browser-commands.cpp:591 msgid "Subscription failed" msgstr "" #: ../code/commands/browser-context-commands.cpp:86 msgid "Could not find a location where to store the certificate" msgstr "" #: ../code/commands/browser-context-commands.cpp:153 msgid "_Remove" msgstr "" #: ../code/commands/browser-context-commands.cpp:188 msgid "_Disconnect from Server" msgstr "" #: ../code/commands/browser-context-commands.cpp:220 #, fuzzy msgid "Create _Account..." msgstr "Crea un document…" #: ../code/commands/browser-context-commands.cpp:245 #, fuzzy msgid "Create Do_cument..." msgstr "Crea un document…" #: ../code/commands/browser-context-commands.cpp:280 #, fuzzy msgid "Create Di_rectory..." msgstr "Crea una sessió…" #: ../code/commands/browser-context-commands.cpp:293 #, fuzzy msgid "_Open Document..." msgstr "Obre un document…" #: ../code/commands/browser-context-commands.cpp:312 #, fuzzy msgid "_Permissions..." msgstr "_Sessió" #: ../code/commands/browser-context-commands.cpp:324 msgid "D_elete" msgstr "" #: ../code/commands/browser-context-commands.cpp:405 msgid "Choose a name for the directory" msgstr "" #: ../code/commands/browser-context-commands.cpp:406 #, fuzzy msgid "Choose a name for the document" msgstr "Tanca un document obert" #: ../code/commands/browser-context-commands.cpp:407 msgid "_Directory Name:" msgstr "" #: ../code/commands/browser-context-commands.cpp:408 #, fuzzy msgid "_Document Name:" msgstr "Gestió de documents" #: ../code/commands/browser-context-commands.cpp:411 msgid "C_reate" msgstr "" #: ../code/commands/browser-context-commands.cpp:415 #, fuzzy msgid "New Directory" msgstr "Direcció" #: ../code/commands/browser-context-commands.cpp:416 #: ../code/commands/file-tasks/task-new.cpp:36 #, fuzzy msgid "New Document" msgstr "Desa el document" #: ../code/commands/browser-context-commands.cpp:436 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "" #: ../code/commands/browser-context-commands.cpp:558 #: ../code/commands/browser-context-commands.cpp:569 msgid "Account successfully created" msgstr "" #: ../code/commands/browser-context-commands.cpp:562 msgid "When re-connecting to the server, the new account will be used." msgstr "" #: ../code/commands/browser-context-commands.cpp:573 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:586 msgid "Failed to create account" msgstr "" #: ../code/commands/browser-context-commands.cpp:589 msgid "Could not save the certificate for the account: %1" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "" #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:474 #: ../code/operations/operation-open-multiple.cpp:180 #, fuzzy msgid "Failed to open document \"%1\"" msgstr "Tanca un document obert" #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:70 msgid "There was an error displaying help." msgstr "" #: ../code/commands/help-commands.cpp:93 msgid "Contributors:" msgstr "" #: ../code/commands/help-commands.cpp:99 msgid "British English:" msgstr "" #: ../code/commands/help-commands.cpp:101 msgid "German:" msgstr "" #: ../code/commands/help-commands.cpp:118 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "" #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:111 #, fuzzy msgid "_Direct Connection" msgstr "Direcció" #: ../code/core/browser.cpp:113 #, fuzzy msgid "Host Name:" msgstr "Nom:" #: ../code/core/certificatemanager.cpp:83 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:276 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:338 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:414 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/foldermanager.cpp:322 msgid "The document has been removed from the server." msgstr "" #: ../code/core/header.cpp:203 #, fuzzy msgid "_None" msgstr "Cap" #: ../code/core/header.cpp:227 #, fuzzy msgid "_File" msgstr "Fitxers" #: ../code/core/header.cpp:230 msgid "_Open..." msgstr "" #: ../code/core/header.cpp:233 #, fuzzy msgid "Open _Location..." msgstr "Obre un document…" #: ../code/core/header.cpp:237 #, fuzzy msgid "Save _As..." msgstr "Desa la sessió…" #: ../code/core/header.cpp:241 ../code/core/iconmanager.cpp:43 msgid "Save All" msgstr "" #: ../code/core/header.cpp:241 msgid "Save all open files locally" msgstr "" #: ../code/core/header.cpp:243 msgid "Export As _HTML..." msgstr "" #: ../code/core/header.cpp:246 msgid "Connect _to Server..." msgstr "" #: ../code/core/header.cpp:251 msgid "_Edit" msgstr "_Edita" #: ../code/core/header.cpp:259 #, fuzzy msgid "_Find..." msgstr "Cerca…" #: ../code/core/header.cpp:261 #, fuzzy msgid "Find Ne_xt" msgstr "Cerca:" #: ../code/core/header.cpp:262 msgid "Find next match of phrase searched for" msgstr "" #: ../code/core/header.cpp:265 msgid "Find Pre_vious" msgstr "" #: ../code/core/header.cpp:266 msgid "Find previous match of phrase searched for" msgstr "" #: ../code/core/header.cpp:271 #, fuzzy msgid "Find and Rep_lace..." msgstr "Cerca i reemplaça…" #: ../code/core/header.cpp:275 #, fuzzy msgid "Go to _Line..." msgstr "Vés a la línia…" #: ../code/core/header.cpp:279 #, fuzzy msgid "Pr_eferences..." msgstr "Preferències…" #: ../code/core/header.cpp:281 #, fuzzy msgid "_View" msgstr "Visualitza" #: ../code/core/header.cpp:284 msgid "Reset User Colors" msgstr "" #: ../code/core/header.cpp:285 #, fuzzy msgid "Hide user colors in current document" msgstr "Cerca un text al document actual" #: ../code/core/header.cpp:289 msgid "Fullscreen" msgstr "" #: ../code/core/header.cpp:290 msgid "Show the editing window in fullscreen mode" msgstr "" #: ../code/core/header.cpp:294 msgid "Zoom In" msgstr "" #: ../code/core/header.cpp:297 msgid "Zoom Out" msgstr "" #: ../code/core/header.cpp:300 #, fuzzy msgid "View Toolbar" msgstr "Barra d'eines" #: ../code/core/header.cpp:301 msgid "Whether to show the toolbar" msgstr "" #: ../code/core/header.cpp:305 msgid "View Statusbar" msgstr "" #: ../code/core/header.cpp:306 msgid "Whether to show the statusbar" msgstr "" #: ../code/core/header.cpp:310 msgid "View Document Browser" msgstr "" #: ../code/core/header.cpp:311 msgid "Whether to show the document browser" msgstr "" #: ../code/core/header.cpp:315 #, fuzzy msgid "View Chat" msgstr "Xat" #: ../code/core/header.cpp:316 msgid "Whether to show the chat pane" msgstr "" #: ../code/core/header.cpp:320 #, fuzzy msgid "View Document User List" msgstr "Llista de documents" #: ../code/core/header.cpp:321 msgid "Whether to show the user list for documents" msgstr "" #: ../code/core/header.cpp:325 msgid "View Chat User List" msgstr "" #: ../code/core/header.cpp:326 msgid "Whether to show the user list for the chat" msgstr "" #: ../code/core/header.cpp:330 msgid "_Highlight Mode" msgstr "" #: ../code/core/header.cpp:336 msgid "_Help" msgstr "A_juda" #: ../code/core/header.cpp:339 msgid "_Contents" msgstr "" #: ../code/core/header.cpp:340 #, fuzzy msgid "Opens the Gobby manual" msgstr "Obre una sessió d'obby nova" #: ../code/core/header.cpp:343 #, fuzzy msgid "_About..." msgstr "Quant a" #: ../code/core/header.cpp:344 msgid "Shows Gobby's copyright and credits" msgstr "Mostra la informació de copyright i autoria del Gobby" #: ../code/core/iconmanager.cpp:49 msgid "User list" msgstr "Llista d'usuaris" #: ../code/core/iconmanager.cpp:55 msgid "Document list" msgstr "Llista de documents" #: ../code/core/iconmanager.cpp:61 ../code/window.cpp:52 msgid "Chat" msgstr "Xat" #: ../code/core/iconmanager.cpp:68 msgid "User Color Indicator" msgstr "" #: ../code/core/selfhoster.cpp:103 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:135 msgid "Failed to generate Diffie-Hellman parameters" msgstr "" #: ../code/core/selfhoster.cpp:137 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:262 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:282 #, fuzzy msgid "Failed to share documents" msgstr "Desa el document «%0%»" #: ../code/core/sessionuserview.cpp:39 #, fuzzy msgid "User List" msgstr "Llista d'usuaris" #: ../code/core/statusbar.cpp:418 #, fuzzy msgid "Ln %1, Col %2\t%3" msgstr "Línia: %0%, Columna: %1%" #: ../code/core/statusbar.cpp:421 msgid "OVR" msgstr "" #: ../code/core/statusbar.cpp:421 msgid "INS" msgstr "" #: ../code/core/textsessionview.cpp:638 msgid "Text written by %1" msgstr "" #: ../code/core/textsessionview.cpp:644 msgid "Unowned text" msgstr "" #: ../code/core/userlist.cpp:108 #, fuzzy msgid "Users" msgstr "Usuari" #: ../code/dialogs/connection-dialog.cpp:26 msgid "Connect to Server" msgstr "" #: ../code/dialogs/connection-dialog.cpp:30 msgid "Please enter a host name with which to establish a connection." msgstr "" #: ../code/dialogs/connection-dialog.cpp:32 msgid "_Remote Endpoint:" msgstr "" #: ../code/dialogs/document-location-dialog.cpp:28 #, fuzzy msgid "Document Name:" msgstr "Gestió de documents" #: ../code/dialogs/document-location-dialog.cpp:155 #, fuzzy msgid "Select document's target location" msgstr "Desa el document en una altra ubicació" #: ../code/dialogs/document-location-dialog.cpp:157 msgid "Choose a directory to create the document into:" msgstr "" #: ../code/dialogs/document-location-dialog.cpp:163 #, fuzzy msgid "Select documents' target location" msgstr "Desa el document en una altra ubicació" #: ../code/dialogs/document-location-dialog.cpp:165 msgid "Choose a directory to create the documents into:" msgstr "" #: ../code/dialogs/find-dialog.cpp:44 ../code/dialogs/find-dialog.cpp:142 #, fuzzy msgid "Find" msgstr "Cerca…" #: ../code/dialogs/find-dialog.cpp:47 #, fuzzy msgid "_Search for:" msgstr "Cerca" #: ../code/dialogs/find-dialog.cpp:49 #, fuzzy msgid "Replace _with:" msgstr "Substitueix amb:" #: ../code/dialogs/find-dialog.cpp:51 #, fuzzy msgid "_Match case" msgstr "Distingeix entre majúscules i minúscules" #: ../code/dialogs/find-dialog.cpp:52 #, fuzzy msgid "Match _entire word only" msgstr "Només paraules senceres" #: ../code/dialogs/find-dialog.cpp:53 msgid "Search _backwards" msgstr "" #: ../code/dialogs/find-dialog.cpp:54 msgid "Wra_p around" msgstr "" #: ../code/dialogs/find-dialog.cpp:100 #, fuzzy msgid "Replace _All" msgstr "Reemplaça-ho _tot" #: ../code/dialogs/find-dialog.cpp:102 msgid "_Replace" msgstr "_Reemplaça" #: ../code/dialogs/find-dialog.cpp:142 #, fuzzy msgid "Replace" msgstr "_Reemplaça" #: ../code/dialogs/find-dialog.cpp:161 ../code/dialogs/find-dialog.cpp:177 #, fuzzy msgid "Phrase \"%1\" has not been found" msgstr "No s'ha trobat «%0%» en el document." #: ../code/dialogs/find-dialog.cpp:335 #, fuzzy msgid "No occurrence has been replaced" msgstr "No s'ha reemplaçat cap coincidència" #: ../code/dialogs/find-dialog.cpp:341 #, fuzzy msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "S'ha reemplaçat %0% coincidència" msgstr[1] "S'han reemplaçat %0% coincidències" #: ../code/dialogs/goto-dialog.cpp:26 msgid "Go to line" msgstr "Vés a la línia" #: ../code/dialogs/goto-dialog.cpp:29 #, fuzzy msgid "Line _number:" msgstr "Número de línia:" #: ../code/dialogs/goto-dialog.cpp:50 msgid "Go To _Line" msgstr "" #: ../code/dialogs/initial-dialog.cpp:76 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:99 msgid "Failed to generate private key" msgstr "" #: ../code/dialogs/initial-dialog.cpp:102 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:141 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:144 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:198 msgid "Choose a user color" msgstr "" #: ../code/dialogs/initial-dialog.cpp:204 msgid "Welcome to Gobby" msgstr "" #: ../code/dialogs/initial-dialog.cpp:216 msgid "" "Before we start, a few options need to be configured. You can later change " "them by choosing Edit ▸ Preferences from the menu." msgstr "" #: ../code/dialogs/initial-dialog.cpp:224 #, fuzzy msgid "User Name" msgstr "Usuari" #: ../code/dialogs/initial-dialog.cpp:226 msgid "Your name as shown to other users." msgstr "" #: ../code/dialogs/initial-dialog.cpp:235 #, fuzzy msgid "User Color" msgstr "Llista d'usuaris" #: ../code/dialogs/initial-dialog.cpp:237 msgid "The color with which text you have written is branded." msgstr "" #: ../code/dialogs/initial-dialog.cpp:256 #, fuzzy msgid "Remote Connections" msgstr "S'ha perdut la connexió" #: ../code/dialogs/initial-dialog.cpp:262 #: ../code/dialogs/preferences-dialog.cpp:217 msgid "Allow remote users to edit local documents" msgstr "" #: ../code/dialogs/initial-dialog.cpp:268 #, fuzzy msgid "Ask remote users for a password" msgstr "Estableix la contrasenya d'usuari" #: ../code/dialogs/initial-dialog.cpp:273 #: ../code/dialogs/preferences-dialog.cpp:220 msgid "Password:" msgstr "Contrasenya:" #: ../code/dialogs/initial-dialog.cpp:297 msgid "No authentication (Not recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:304 msgid "" "Don't authenticate ourselves to remote users. Data transfer will be " "unencrypted." msgstr "" #: ../code/dialogs/initial-dialog.cpp:313 msgid "Create a self-signed certificate (Recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:321 msgid "" "It may take a minute or two until remote users can connect while the " "security certificate is being generated." msgstr "" #: ../code/dialogs/initial-dialog.cpp:331 msgid "Use an existing certificate (Expert option)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:338 msgid "" "Use an existing private key and certificate for authentication. The files " "must be in PEM format." msgstr "" #: ../code/dialogs/initial-dialog.cpp:347 #: ../code/dialogs/preferences-dialog.cpp:766 msgid "Private key:" msgstr "" #: ../code/dialogs/initial-dialog.cpp:349 #: ../code/dialogs/preferences-dialog.cpp:772 msgid "Certificate:" msgstr "" #: ../code/dialogs/open-location-dialog.cpp:26 msgid "Open Location" msgstr "" #: ../code/dialogs/open-location-dialog.cpp:27 msgid "Enter the _location (URI) of the file you would like to open:" msgstr "" #: ../code/dialogs/password-dialog.cpp:25 #, fuzzy msgid "Password Required" msgstr "Es requereix una contrasenya per a la sessió" #: ../code/dialogs/password-dialog.cpp:31 msgid "Connection to host \"%1\" requires a password." msgstr "" #: ../code/dialogs/password-dialog.cpp:32 msgid "Invalid password for host \"%1\". Please try again." msgstr "" #: ../code/dialogs/password-dialog.cpp:35 #, fuzzy msgid "Server _Password:" msgstr "Contrasenya d'usuari:" #: ../code/dialogs/preferences-dialog.cpp:198 msgid "Settings" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:199 msgid "Remote Users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:200 #, fuzzy msgid "Local Documents" msgstr "Desa tots els documents" #: ../code/dialogs/preferences-dialog.cpp:202 #, fuzzy msgid "User name:" msgstr "Nom nou:" #: ../code/dialogs/preferences-dialog.cpp:204 #, fuzzy msgid "User color:" msgstr "Contrasenya d'usuari:" #: ../code/dialogs/preferences-dialog.cpp:206 msgid "Color intensity:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:208 msgid "Choose a new user color" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:209 msgid "Show cursors of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:210 msgid "Show selections of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:212 #, fuzzy msgid "Highlight current line of remote users" msgstr "Realça la línia actual" #: ../code/dialogs/preferences-dialog.cpp:214 msgid "Indicate cursor position of remote users in the scrollbar" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:219 msgid "Require remote users to enter a password" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:222 msgid "Port:" msgstr "Port:" #: ../code/dialogs/preferences-dialog.cpp:226 msgid "Remember local documents after Gobby restart" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:227 msgid "Local documents directory:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:423 msgid "Tab Stops" msgstr "Tabulacions" #: ../code/dialogs/preferences-dialog.cpp:424 msgid "Indentation" msgstr "Sagnat" #: ../code/dialogs/preferences-dialog.cpp:425 #, fuzzy msgid "Home/End Behavior" msgstr "Comportament d'Inici/Fi" #: ../code/dialogs/preferences-dialog.cpp:426 msgid "File Saving" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:427 #, fuzzy msgid "_Tab width:" msgstr "Amplada del tabulador:" #: ../code/dialogs/preferences-dialog.cpp:429 #, fuzzy msgid "Insert _spaces instead of tabs" msgstr "Insereix espais en comptes de tabulacions" #: ../code/dialogs/preferences-dialog.cpp:430 #, fuzzy msgid "Enable automatic _indentation" msgstr "Habilita el sagnat automàtic" #: ../code/dialogs/preferences-dialog.cpp:431 #, fuzzy msgid "Smart _home/end" msgstr "Inici/fi intel·ligent" #: ../code/dialogs/preferences-dialog.cpp:432 #, fuzzy msgid "Enable _automatic saving of documents" msgstr "Habilita el sagnat automàtic" #: ../code/dialogs/preferences-dialog.cpp:434 msgid "Autosave interval in _minutes:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:455 msgid "" "With this option enabled, Home/End keys move to first/last character before " "going to the start/end of the line." msgstr "" "Amb aquesta opció habilitada, les tecles Inici/Fi mouen al primer/darrer " "caràcter abans d'anar al principi/final de la línia." #: ../code/dialogs/preferences-dialog.cpp:525 #, fuzzy msgid "Text Wrapping" msgstr "Ajustament del text" #: ../code/dialogs/preferences-dialog.cpp:526 #, fuzzy msgid "Line Numbers" msgstr "Números de línies" #: ../code/dialogs/preferences-dialog.cpp:527 #, fuzzy msgid "Current Line" msgstr "Línia actual" #: ../code/dialogs/preferences-dialog.cpp:528 #, fuzzy msgid "Right Margin" msgstr "Marge dret" #: ../code/dialogs/preferences-dialog.cpp:529 #, fuzzy msgid "Bracket Matching" msgstr "Emparellament de claus" #: ../code/dialogs/preferences-dialog.cpp:530 msgid "Whitespace Display" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:531 msgid "Enable text wrapping" msgstr "Habilita l'ajustament automàtic del text" #: ../code/dialogs/preferences-dialog.cpp:532 msgid "Do not split words over two lines" msgstr "No divideixes paraules en dos línies" #: ../code/dialogs/preferences-dialog.cpp:533 msgid "Display line numbers" msgstr "Mostra els números de línia" #: ../code/dialogs/preferences-dialog.cpp:534 msgid "Highlight current line" msgstr "Realça la línia actual" #: ../code/dialogs/preferences-dialog.cpp:535 msgid "Display right margin" msgstr "Mostra el marge dret" #: ../code/dialogs/preferences-dialog.cpp:536 msgid "Right margin at column:" msgstr "Marge dreta a la columna:" #: ../code/dialogs/preferences-dialog.cpp:537 msgid "Highlight matching bracket" msgstr "Realça la clau emparellada" #: ../code/dialogs/preferences-dialog.cpp:589 msgid "Display no whitespace" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:592 msgid "Display spaces" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:596 #, fuzzy msgid "Display tabs" msgstr "Mostra els números de línia" #: ../code/dialogs/preferences-dialog.cpp:600 msgid "Display tabs and spaces" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:651 msgid "Toolbar" msgstr "Barra d'eines" #: ../code/dialogs/preferences-dialog.cpp:652 msgid "Font" msgstr "Tipus de lletra" #: ../code/dialogs/preferences-dialog.cpp:653 msgid "Color Scheme" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:661 msgid "Show text only" msgstr "Mostra només text" #: ../code/dialogs/preferences-dialog.cpp:663 msgid "Show icons only" msgstr "Mostra només icones" #: ../code/dialogs/preferences-dialog.cpp:665 msgid "Show both icons and text" msgstr "Mostra icones i text" #: ../code/dialogs/preferences-dialog.cpp:667 msgid "Show text besides icons" msgstr "Mostra text al costat de les icones" #: ../code/dialogs/preferences-dialog.cpp:756 msgid "Trusted CAs" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:757 #, fuzzy msgid "Secure Connection" msgstr "S'ha perdut la connexió" #: ../code/dialogs/preferences-dialog.cpp:758 #, fuzzy msgid "Authentication" msgstr "Sagnat" #: ../code/dialogs/preferences-dialog.cpp:759 msgid "Select a file containing trusted CAs" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:764 msgid "None" msgstr "Cap" #: ../code/dialogs/preferences-dialog.cpp:765 msgid "Use a certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:767 msgid "Select a private key file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:769 #: ../code/dialogs/preferences-dialog.cpp:776 #, fuzzy msgid "Create New..." msgstr "Crea una sessió…" #: ../code/dialogs/preferences-dialog.cpp:773 msgid "Select a certificate file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:801 msgid "Use TLS if possible" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:804 msgid "Always use TLS" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:892 msgid "Error reading file:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:916 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:948 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:966 msgid "Select a location for the generated certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:1068 msgid "Preferences" msgstr "Preferències" #: ../code/dialogs/preferences-dialog.cpp:1073 msgid "User" msgstr "Usuari" #: ../code/dialogs/preferences-dialog.cpp:1074 msgid "Editor" msgstr "Editor" #: ../code/dialogs/preferences-dialog.cpp:1075 msgid "View" msgstr "Visualitza" #: ../code/dialogs/preferences-dialog.cpp:1076 msgid "Appearance" msgstr "Aparença" #: ../code/dialogs/preferences-dialog.cpp:1077 msgid "Security" msgstr "" #: ../code/main.cpp:194 msgid "Gobby options" msgstr "" #: ../code/main.cpp:194 msgid "Options related to Gobby" msgstr "" #: ../code/main.cpp:199 msgid "Display version information and exit" msgstr "" #: ../code/main.cpp:206 msgid "Also start a new Gobby instance when there is one running already" msgstr "" #: ../code/main.cpp:214 msgid "Connect to given host on startup, can be given multiple times" msgstr "" #: ../code/main.cpp:215 msgid "HOSTNAME" msgstr "" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "" #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "" #: ../code/operations/operation-export-html.cpp:168 #, c-format msgid "written by: %s" msgstr "" #: ../code/operations/operation-export-html.cpp:241 msgid "" msgstr "" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:254 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "" #: ../code/operations/operation-export-html.cpp:395 msgid "Participants" msgstr "" #: ../code/operations/operation-export-html.cpp:475 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "" #: ../code/operations/operation-export-html.cpp:536 msgid "Failed to export document \"%1\" to HTML" msgstr "" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "" #: ../code/operations/operation-new.cpp:76 #, fuzzy msgid "Creating document \"%1\"..." msgstr "Crea un document…" #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "" #: ../code/operations/operation-new.cpp:89 #, fuzzy msgid "Failed to create document \"%1\"" msgstr "Desa el document actual" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "" #: ../code/operations/operation-open.cpp:114 #, fuzzy msgid "Opening document \"%1\"..." msgstr "Obre un document…" #: ../code/operations/operation-open.cpp:134 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "" #: ../code/operations/operation-open.cpp:323 msgid "The file contains data not in the specified encoding" msgstr "" #: ../code/operations/operation-open.cpp:334 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "" #: ../code/operations/operation-open-multiple.cpp:91 msgid "Parent folder was removed" msgstr "" #: ../code/operations/operation-open-multiple.cpp:193 #, fuzzy msgid "Failed to open multiple documents" msgstr "Tanca un document obert" #: ../code/operations/operation-save.cpp:97 #, fuzzy msgid "Saving document \"%1\" to \"%2\"..." msgstr "Desa el document «%0%»" #: ../code/operations/operation-save.cpp:226 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" #: ../code/operations/operation-save.cpp:287 #, fuzzy msgid "Failed to save document \"%1\"" msgstr "Desa el document «%0%»" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "Tanca un document obert" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 msgid "Subscribing to \"%1\"..." msgstr "" #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "Desa el document actual" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "Crea un document…" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 msgid "Could not subscribe to \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "El document %0% no existeix." #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "" #: ../code/util/uri.cpp:91 #, fuzzy msgid "Device \"%1\" does not exist" msgstr "El document %0% no existeix." #: ../code/window.cpp:104 msgid "This Computer" msgstr "" #: ../code/window.cpp:129 #, fuzzy msgid "Document Browser" msgstr "Llista de documents" #: ../code/window.cpp:182 msgid "You are still connected to a session" msgstr "Encara esteu connectat a una sessió" #: ../code/window.cpp:190 #, fuzzy msgid "Do you want to close Gobby nevertheless?" msgstr "Voleu tancar el Gobby igualment?" #: ../code/window.cpp:196 msgid "C_ancel" msgstr "C_ancel·la" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "" #: ../gobby-0.5.desktop.in.h:2 #, fuzzy msgid "Collaborative Editor" msgstr "Editor col·laboratiu Gobby" #: ../gobby-0.5.desktop.in.h:3 #, fuzzy msgid "Gobby Collaborative Editor (0.5)" msgstr "Editor col·laboratiu Gobby" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "Editeu fitxers de text col·laborativament" #, fuzzy #~ msgid "" #~ "This program is free software; you can redistribute it and/or modify it " #~ "under the terms of the GNU General Public License as published by the " #~ "Free Software Foundation; either version 2 of the License, or (at your " #~ "option) any later version.\n" #~ "\n" #~ "This program is distributed in the hope that it will be useful, but " #~ "WITHOUT ANY WARRANTY; without even the implied warranty of " #~ "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General " #~ "Public License for more details.\n" #~ "\n" #~ "You should have received a copy of the GNU General Public License along " #~ "with this program; if not, write to the Free Software Foundation, Inc., " #~ "51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA" #~ msgstr "" #~ "Aquest programa és programari lliure; podeu redistribuir-lo i/o\n" #~ "modificar-lo sota els termes de la Llicència Pública General GNU tal i\n" #~ "com ha estat publicada per la Free Software Foundation; bé sota la\n" #~ "versió 2 de la Llicència o bé (si ho preferiu) sota qualsevol versió\n" #~ "posterior.\n" #~ "\n" #~ "Aquest programa es distribueix amb l'expectativa de que serà útil,\n" #~ "però SENSE CAP GARANTIA; ni tan sols la garantia implícita de\n" #~ "COMERCIABILITAT o ADEQUACIÓ PER UN PROPÒSIT PARTICULAR. Vegeu la\n" #~ "Llicència Pública General GNU per obtenir-ne més detalls." #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "Desa el document actual" #~ msgid "_Up" #~ msgstr "A _dalt" #~ msgid "_Down" #~ msgstr "A _baix" #~ msgid "Send" #~ msgstr "Envia" #~ msgid "Command '%0%' not found. Type /help for a list of existing commands." #~ msgstr "" #~ "No s'ha trobat l'ordre '%0%'. Teclegeu /help per llistar les ordres " #~ "existents." #~ msgid "%0%: %1%" #~ msgstr "%0%: %1%" #~ msgid "Usage: /remove " #~ msgstr "Forma d'ús: /remove " #~ msgid "Subscribe" #~ msgstr "Subscriu-me" #~ msgid "GtkSpell error: %0%" #~ msgstr "Error del GtkSpell: %0%" #~ msgid "UTF-8|ISO-8859-1|ISO-8859-15|UTF-7|UTF-16|UCS-2|UCS-4" #~ msgstr "UTF-8|ISO-8859-1|ISO-8859-15|UTF-7|UTF-16|UCS-2|UCS-4" #~ msgid "" #~ "Failed to convert input into UTF-8: Either the encoding is unknown or it " #~ "is binary input." #~ msgstr "" #~ "No s'ha pogut convertir l'entrada a UTF-8: la codificació és desconeguda " #~ "o és entrada binària." #~ msgid "Auto Detect" #~ msgstr "Autodetecta" #~ msgid "Character Encoding:" #~ msgstr "Codificació de caràcters:" #~ msgid "Match as regular expression" #~ msgstr "Fes coincidir com una expressió regular" #~ msgid "Search and replace" #~ msgstr "Cerca i reemplaça" #~ msgid "No document currently opened" #~ msgstr "No hi ha cap document obert" #~ msgid "_Go to line" #~ msgstr "_Vés a la línia" #~ msgid "Join session..." #~ msgstr "Uneix-te a una sessió…" #~ msgid "Joins an existing obby session" #~ msgstr "Uneix a una sessió d'obby ja existent" #~ msgid "Save session" #~ msgstr "Desa la sessió…" #~ msgid "Saves the complete session for a later restore" #~ msgstr "Desa la sessió completa per a restaurar-la més endavant" #~ msgid "Save session as..." #~ msgstr "Anomena i desa la sessió…" #~ msgid "\"Saves as...\" the complete session for a later restore" #~ msgstr "«Anomena i desa…» la sessió completa per a restaurar-la més tard" #~ msgid "Quit session" #~ msgstr "Desconnecta de la sessió" #~ msgid "Leaves the currently running obby session" #~ msgstr "Abandona la sessió d'obby que s'està executant" #~ msgid "Quit" #~ msgstr "Surt" #~ msgid "Quits the application" #~ msgstr "Surt de l'aplicació" #~ msgid "Creates a new document" #~ msgstr "Crea un document nou" #~ msgid "Loads a file into a new document" #~ msgstr "Carrega un fitxer a un document nou" #~ msgid "Saves a document into a file" #~ msgstr "Desa el document en un fitxer" #~ msgid "Save document as..." #~ msgstr "Anomena i desa el document…" #~ msgid "Saves all documents" #~ msgstr "Desa tots els documents" #~ msgid "Close document" #~ msgstr "Tanca el document" #~ msgid "Search for a text and replace it with another one" #~ msgstr "Cerca un text i reemplaça'l amb un altre" #~ msgid "Move cursor to a specified line" #~ msgstr "Mou el cursor a una línia especificada" #~ msgid "Displays a dialog to customize Gobby for your needs" #~ msgstr "" #~ "Mostra un diàleg per a personalitzar el Gobby a les vostres necessitats" #~ msgid "Document preferences..." #~ msgstr "Preferències del document…" #~ msgid "Shows a preferences dialog that is just applied to this document" #~ msgstr "" #~ "Mostra un diàleg de preferèncias que només s'aplica a aquest document" #~ msgid "Syntax" #~ msgstr "Sintaxi" #~ msgid "_User" #~ msgstr "_Usuari" #~ msgid "Sets a password for this user" #~ msgstr "Estableix una contrasenya per a aquest usuari" #~ msgid "Set color..." #~ msgstr "Estableix el color…" #~ msgid "Sets a new color for this user" #~ msgstr "Estableix el color per a aquest usuari" #~ msgid "_Window" #~ msgstr "_Finestra" #~ msgid "Displays a list of users that are currently joined" #~ msgstr "Mostra la llista d'usuaris que estan conectats" #~ msgid "Displays a list of documents within the current session" #~ msgstr "Mostra la llista de documents de dins de la sessió actual" #~ msgid "Displays a chat to talk to other people in the session" #~ msgstr "Mostra el xat per parlar amb l'altra gent a la sessió." #~ msgid "Unselects the current language" #~ msgstr "Desselecciona el llenguatge actual" #~ msgid "Selects %0% as language" #~ msgstr "Selecciona %0% com a llenguatge" #~ msgid "Create obby session" #~ msgstr "Crea una sessió d'obby" #~ msgid "Color:" #~ msgstr "Color:" #~ msgid "Restore session:" #~ msgstr "Restaura la sessió:" #~ msgid "Restore session" #~ msgstr "Restaura una sessió" #~ msgid ".obby files" #~ msgstr "Fitxers .obby" #~ msgid "All files" #~ msgstr "Tots els fitxers" #~ msgid "_Host" #~ msgstr "_Servidor" #~ msgid "Opening obby session..." #~ msgstr "S'està obrint la sessió d'obby…" #~ msgid "Join obby session" #~ msgstr "Connecta a una sessió d'obby" #~ msgid "Host:" #~ msgstr "Servidor:" #~ msgid "Local network" #~ msgstr "Xarxa local" #~ msgid "Host" #~ msgstr "Servidor" #~ msgid "Port" #~ msgstr "Port" #~ msgid "Failure" #~ msgstr "Fallada" #~ msgid "" #~ "User password for user '%0%' required. You may either choose another user " #~ "name, type in your user password or cancel the connection." #~ msgstr "" #~ "Es requereix la contrasenya per l'usuari «%0%». Podeu triar un altre nom " #~ "d'usuari, introduir la vostra contrasenya d'usuari o cancel·lar la " #~ "connexió." #~ msgid "" #~ "Name is already in use. You may choose another name or cancel the " #~ "connection." #~ msgstr "" #~ "El nom ja està en ús. Podeu triar un altre nom o cancel·lar la connexió." #~ msgid "" #~ "Color is already in use. You may choose another color or cancel the " #~ "connection." #~ msgstr "" #~ "El color ja està en ús. Podeu triar un altre color o cancel·lar la " #~ "connexió." #~ msgid "" #~ "Session password required. You have to type in the password to be able to " #~ "join the obby session." #~ msgstr "" #~ "Es requereix una contrasenya per a la sessió. Heu d'introduir la " #~ "contrasenya per a poder unir-vos a la sessió d'obby." #~ msgid "Session password:" #~ msgstr "Contrasenya de la sessió:" #~ msgid "Joining obby session..." #~ msgstr "S'està unint a una sessió d'obby…" #~ msgid "Setting up connection encryption (TLS)..." #~ msgstr "S'està configurant el xifratge (TLS) de la connexió…" #~ msgid "Login packet sent, waiting for response..." #~ msgstr "S'ha enviat el paquet d'entrada, s'està esperant la resposta…" #~ msgid "Logged in successfully, synchronising session..." #~ msgstr "S'ha entrat amb èxit, s'està sincronitzant la sessió…" #~ msgid "Windows" #~ msgstr "Finestres" #~ msgid "Remember the positions and states" #~ msgstr "Recorda les posicions i estats" #~ msgid "Highlight the window on incoming chat messages" #~ msgstr "Realça la finestra quan arriben missatges de xat" #~ msgid "Open new remotely-created documents automatically" #~ msgstr "Obre automàticament els documents nous creats remotament" #~ msgid "Pattern" #~ msgstr "Patró" #~ msgid "Language" #~ msgstr "Llenguatge" #~ msgid "Mime type" #~ msgstr "Tipus MIME" #~ msgid "This is a list of all recognized file types" #~ msgstr "Aquesta es una llista de tots els tipus de fitxer reconeguts" #~ msgid "Pattern must not be empty." #~ msgstr "El patró no pot ser buit" #~ msgid "There is no language with the mime type '%0%'." #~ msgstr "No hi ha cap llenguatge amb el tipus mime «%0%»." #~ msgid "Behaviour" #~ msgstr "Comportament" #~ msgid "Not connected" #~ msgstr "Desconnectat" #~ msgid "Selected language: %0%" #~ msgstr "Llenguatge seleccionat: %0%" #~ msgid "No language selected" #~ msgstr "No hi ha cap llenguatge seleccionat" #~ msgid "Online" #~ msgstr "En línia" #~ msgid "Offline" #~ msgstr "Fora de línia" #~ msgid "" #~ "Zeroconf initialisation failed. Probably you need to run avahi-daemon or " #~ "mDNSResponder, depending on the library you use, as root prior to Gobby. " #~ "Zeroconf support is deactivated for this session." #~ msgstr "" #~ "Ha fallat la inicialització del Zeroconf. És possible que hàgiu " #~ "d'executar l'avahi-daemon o mDNSResponder, depenent de la biblioteca que " #~ "empreu, com a root, abans d'executar el Gobby. S'ha inhabilitat el suport " #~ "de Zeroconf per a aquesta sessió." #~ msgid "Use default .obby extension if none is given" #~ msgstr "Utilitza l'extensió per defecte .obby si no es dóna cap" #~ msgid "Save obby session" #~ msgstr "Desa la sessió d'obby" #~ msgid "A collaborative text editor" #~ msgstr "Un editor de text col·laboratiu" #~ msgid "Create document" #~ msgstr "Crea un document" #~ msgid "Enter document name" #~ msgstr "Introduïu el nom del document" #~ msgid "Open new document" #~ msgstr "Obre un document nou" #~ msgid "" #~ "Click on \"Apply\" to apply the new settings to documents that are " #~ "currently open. \"OK\" will just store the values to use them with newly " #~ "created documents." #~ msgstr "" #~ "Feu clic en «Aplica» per a aplicar els nous paràmetres als documents que " #~ "estan oberts. «D'acord» només emmagatzemarà els valors per a usar-los amb " #~ "els documents de nova creació." #~ msgid "" #~ "Set a user password for your user account. When you try to login next " #~ "time with this user, you will be prompted for your password." #~ msgstr "" #~ "Estableix una contrasenya d'usuari per al vostre compte d'usuari. Quan " #~ "intenteu entrar la pròxima vegada amb aquest usuari, se us demanarà la " #~ "contrasenya." #~ msgid "" #~ "These preferences affect only the currently active document \"%0%\". If " #~ "you want to change global preferences, use the preferences menu item in " #~ "the \"Edit\" menu." #~ msgstr "" #~ "Aquestes preferències només afecten al document actiu «%0%». Si voleu " #~ "canviar les preferències globals, utilitzeu l'element del menú de " #~ "preferències al menú «Edita»." #~ msgid "Color change failed: Color already in use" #~ msgstr "Ha fallat el canvi de color: el color ja està en ús" #~ msgid "Connected to %0%:%1%" #~ msgstr "S'ha connectat a %0%:%1%" #~ msgid "Serving on port %0%" #~ msgstr "S'està servint al port %0%" #~ msgid "Save changes to document \"%0%\" before closing?" #~ msgstr "Voleu desar els canvis al document «%0%» abans de tancar?" #~ msgid "" #~ "If you don't save, changes will be discarded, but may still be retrieved " #~ "if you re-subscribe to the document as long as the session remains open." #~ msgstr "" #~ "Si no deseu, es descartaran els canvis, pero encara podrien ser " #~ "recuperats si us torneu a subscriure al document sempre que la sessió " #~ "encara sigui oberta." #~ msgid "If you don't save, changes will be discarded." #~ msgstr "Si no els deseu, es descartaran tots els canvis." #~ msgid "Close without saving" #~ msgstr "Tanca sense desar" #~ msgid "Set colour..." #~ msgstr "Estableix el color…" #~ msgid "Sets a new colour for this user" #~ msgstr "Estableix el color per a aquest usuari" #~ msgid "Colour:" #~ msgstr "Color:" #~ msgid "Displays a dialog to customise Gobby for your needs" #~ msgstr "" #~ "Mostra un diàleg per a personalitzar el Gobby a les vostres necessitats" #~ msgid "Colour change failed: Colour already in use" #~ msgstr "Ha fallat el canvi de color: el color ja està en ús" #~ msgid "" #~ "Colour is already in use. You may choose another colour or cancel the " #~ "connection." #~ msgstr "" #~ "El color ja està en ús. Podeu triar un altre color o cancel·lar la " #~ "connexió." gobby-0.5.0/po/Makefile.in.in0000644000175000017500000001604612367702433012645 00000000000000# Makefile for program source directory in GNU NLS utilities package. # Copyright (C) 1995, 1996, 1997 by Ulrich Drepper # Copyright (C) 2004-2008 Rodney Dawes # # This file may be copied and used freely without restrictions. It may # be used in projects which are not available under a GNU Public License, # but which still want to provide support for the GNU gettext functionality. # # - Modified by Owen Taylor to use GETTEXT_PACKAGE # instead of PACKAGE and to look for po2tbl in ./ not in intl/ # # - Modified by jacob berkman to install # Makefile.in.in and po2tbl.sed.in for use with glib-gettextize # # - Modified by Rodney Dawes for use with intltool # # We have the following line for use by intltoolize: # INTLTOOL_MAKEFILE GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = @top_builddir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datadir = @datadir@ datarootdir = @datarootdir@ libdir = @libdir@ DATADIRNAME = @DATADIRNAME@ itlocaledir = $(prefix)/$(DATADIRNAME)/locale subdir = po install_sh = @install_sh@ # Automake >= 1.8 provides @mkdir_p@. # Until it can be supposed, use the safe fallback: mkdir_p = $(install_sh) -d INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ GMSGFMT = @GMSGFMT@ MSGFMT = @MSGFMT@ XGETTEXT = @XGETTEXT@ INTLTOOL_UPDATE = @INTLTOOL_UPDATE@ INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ MSGMERGE = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --dist GENPOT = INTLTOOL_EXTRACT="$(INTLTOOL_EXTRACT)" XGETTEXT="$(XGETTEXT)" srcdir=$(srcdir) $(INTLTOOL_UPDATE) --gettext-package $(GETTEXT_PACKAGE) --pot ALL_LINGUAS = @ALL_LINGUAS@ PO_LINGUAS=$(shell if test -r $(srcdir)/LINGUAS; then grep -v "^\#" $(srcdir)/LINGUAS; else echo "$(ALL_LINGUAS)"; fi) USER_LINGUAS=$(shell if test -n "$(LINGUAS)"; then LLINGUAS="$(LINGUAS)"; ALINGUAS="$(ALL_LINGUAS)"; for lang in $$LLINGUAS; do if test -n "`grep \^$$lang$$ $(srcdir)/LINGUAS 2>/dev/null`" -o -n "`echo $$ALINGUAS|tr ' ' '\n'|grep \^$$lang$$`"; then printf "$$lang "; fi; done; fi) USE_LINGUAS=$(shell if test -n "$(USER_LINGUAS)" -o -n "$(LINGUAS)"; then LLINGUAS="$(USER_LINGUAS)"; else if test -n "$(PO_LINGUAS)"; then LLINGUAS="$(PO_LINGUAS)"; else LLINGUAS="$(ALL_LINGUAS)"; fi; fi; for lang in $$LLINGUAS; do printf "$$lang "; done) POFILES=$(shell LINGUAS="$(PO_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.po "; done) DISTFILES = Makefile.in.in POTFILES.in $(POFILES) EXTRA_DISTFILES = ChangeLog POTFILES.skip Makevars LINGUAS POTFILES = \ # This comment gets stripped out CATALOGS=$(shell LINGUAS="$(USE_LINGUAS)"; for lang in $$LINGUAS; do printf "$$lang.gmo "; done) .SUFFIXES: .SUFFIXES: .po .pox .gmo .mo .msg .cat AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ INTLTOOL_V_MSGFMT = $(INTLTOOL__v_MSGFMT_$(V)) INTLTOOL__v_MSGFMT_= $(INTLTOOL__v_MSGFMT_$(AM_DEFAULT_VERBOSITY)) INTLTOOL__v_MSGFMT_0 = @echo " MSGFMT" $@; .po.pox: $(MAKE) $(GETTEXT_PACKAGE).pot $(MSGMERGE) $< $(GETTEXT_PACKAGE).pot -o $*.pox .po.mo: $(INTLTOOL_V_MSGFMT)$(MSGFMT) -o $@ $< .po.gmo: $(INTLTOOL_V_MSGFMT)file=`echo $* | sed 's,.*/,,'`.gmo \ && rm -f $$file && $(GMSGFMT) -o $$file $< .po.cat: sed -f ../intl/po2msg.sed < $< > $*.msg \ && rm -f $@ && gencat $@ $*.msg all: all-@USE_NLS@ all-yes: $(CATALOGS) all-no: $(GETTEXT_PACKAGE).pot: $(POTFILES) $(GENPOT) install: install-data install-data: install-data-@USE_NLS@ install-data-no: all install-data-yes: all linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ dir=$(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $$dir; \ if test -r $$lang.gmo; then \ $(INSTALL_DATA) $$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $$lang.gmo as $$dir/$(GETTEXT_PACKAGE).mo"; \ else \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo $$dir/$(GETTEXT_PACKAGE).mo; \ echo "installing $(srcdir)/$$lang.gmo as" \ "$$dir/$(GETTEXT_PACKAGE).mo"; \ fi; \ if test -r $$lang.gmo.m; then \ $(INSTALL_DATA) $$lang.gmo.m $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $$lang.gmo.m as $$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ if test -r $(srcdir)/$$lang.gmo.m ; then \ $(INSTALL_DATA) $(srcdir)/$$lang.gmo.m \ $$dir/$(GETTEXT_PACKAGE).mo.m; \ echo "installing $(srcdir)/$$lang.gmo.m as" \ "$$dir/$(GETTEXT_PACKAGE).mo.m"; \ else \ true; \ fi; \ fi; \ done # Empty stubs to satisfy archaic automake needs dvi info ctags tags CTAGS TAGS ID: # Define this as empty until I found a useful application. install-exec installcheck: uninstall: linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo; \ rm -f $(DESTDIR)$(itlocaledir)/$$lang/LC_MESSAGES/$(GETTEXT_PACKAGE).mo.m; \ done check: all $(GETTEXT_PACKAGE).pot rm -f missing notexist srcdir=$(srcdir) $(INTLTOOL_UPDATE) -m if [ -r missing -o -r notexist ]; then \ exit 1; \ fi mostlyclean: rm -f *.pox $(GETTEXT_PACKAGE).pot *.old.po cat-id-tbl.tmp rm -f .intltool-merge-cache clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES stamp-it rm -f *.mo *.msg *.cat *.cat.m *.gmo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f Makefile.in.in distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(DISTFILES) dists="$(DISTFILES)"; \ extra_dists="$(EXTRA_DISTFILES)"; \ for file in $$extra_dists; do \ test -f $(srcdir)/$$file && dists="$$dists $(srcdir)/$$file"; \ done; \ for file in $$dists; do \ test -f $$file || file="$(srcdir)/$$file"; \ ln $$file $(distdir) 2> /dev/null \ || cp -p $$file $(distdir); \ done update-po: Makefile $(MAKE) $(GETTEXT_PACKAGE).pot tmpdir=`pwd`; \ linguas="$(USE_LINGUAS)"; \ for lang in $$linguas; do \ echo "$$lang:"; \ result="`$(MSGMERGE) -o $$tmpdir/$$lang.new.po $$lang`"; \ if $$result; then \ if cmp $(srcdir)/$$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.gmo failed!"; \ rm -f $$tmpdir/$$lang.new.po; \ fi; \ done Makefile POTFILES: stamp-it @if test ! -f $@; then \ rm -f stamp-it; \ $(MAKE) stamp-it; \ fi stamp-it: Makefile.in.in $(top_builddir)/config.status POTFILES.in cd $(top_builddir) \ && CONFIG_FILES=$(subdir)/Makefile.in CONFIG_HEADERS= CONFIG_LINKS= \ $(SHELL) ./config.status # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gobby-0.5.0/po/pt_BR.po0000644000175000017500000010337712376151304011540 00000000000000# Brazilian translation of Gobby # Copyright © 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the gobby package. # Vitor Lobo , 2014. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: gobby 0.4.94\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-08-23 13:43-0400\n" "PO-Revision-Date: 2014-07-11 18:12+0100\n" "Last-Translator: Vitor Lobo \n" "Language-Team: Portuguese Brazilian \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n!=1;\n" #: ../code/commands/auth-commands.cpp:196 #, fuzzy msgid "Password required" msgstr "Senha Requerida" #: ../code/commands/auth-commands.cpp:214 msgid "Incorrect password" msgstr "" #: ../code/commands/browser-commands.cpp:288 msgid "Subscribing to %1..." msgstr "" #: ../code/commands/browser-commands.cpp:301 msgid "Subscribing to chat on %1..." msgstr "" #: ../code/commands/browser-commands.cpp:591 msgid "Subscription failed" msgstr "Assinatura falhou" #: ../code/commands/browser-context-commands.cpp:86 msgid "Could not find a location where to store the certificate" msgstr "" #: ../code/commands/browser-context-commands.cpp:153 msgid "_Remove" msgstr "" #: ../code/commands/browser-context-commands.cpp:188 #, fuzzy msgid "_Disconnect from Server" msgstr "Conectar ao Servidor" #: ../code/commands/browser-context-commands.cpp:220 #, fuzzy msgid "Create _Account..." msgstr "Criar Diretório..." #: ../code/commands/browser-context-commands.cpp:245 msgid "Create Do_cument..." msgstr "" #: ../code/commands/browser-context-commands.cpp:280 #, fuzzy msgid "Create Di_rectory..." msgstr "Criar Diretório..." #: ../code/commands/browser-context-commands.cpp:293 msgid "_Open Document..." msgstr "_Abrir Documento..." #: ../code/commands/browser-context-commands.cpp:312 msgid "_Permissions..." msgstr "" #: ../code/commands/browser-context-commands.cpp:324 msgid "D_elete" msgstr "" #: ../code/commands/browser-context-commands.cpp:405 msgid "Choose a name for the directory" msgstr "Escolha um nome para o diretório" #: ../code/commands/browser-context-commands.cpp:406 msgid "Choose a name for the document" msgstr "Escolha um nome para o documento" #: ../code/commands/browser-context-commands.cpp:407 msgid "_Directory Name:" msgstr "_Nome do diretório" #: ../code/commands/browser-context-commands.cpp:408 msgid "_Document Name:" msgstr "_Nome do documento" #: ../code/commands/browser-context-commands.cpp:411 msgid "C_reate" msgstr "C_riar" #: ../code/commands/browser-context-commands.cpp:415 msgid "New Directory" msgstr "Novo Diretório" #: ../code/commands/browser-context-commands.cpp:416 #: ../code/commands/file-tasks/task-new.cpp:36 msgid "New Document" msgstr "Novo Documento" #: ../code/commands/browser-context-commands.cpp:436 #: ../code/commands/file-tasks/task-open-file.cpp:22 msgid "Choose a text file to open" msgstr "Escolha um arquivo de texto para abrir" #: ../code/commands/browser-context-commands.cpp:558 #: ../code/commands/browser-context-commands.cpp:569 msgid "Account successfully created" msgstr "" #: ../code/commands/browser-context-commands.cpp:562 msgid "When re-connecting to the server, the new account will be used." msgstr "" #: ../code/commands/browser-context-commands.cpp:573 msgid "" "The certificate has been stored at %1.\n" "\n" "To login to this account, set the certificate in Gobby's preferences and re-" "connect to the server." msgstr "" #: ../code/commands/browser-context-commands.cpp:586 #, fuzzy msgid "Failed to create account" msgstr "Falha ao criar documento \"%1\"" #: ../code/commands/browser-context-commands.cpp:589 msgid "Could not save the certificate for the account: %1" msgstr "" #: ../code/commands/file-tasks/task-export-html.cpp:27 msgid "Choose a location to export document \"%1\" to" msgstr "Escolha um local para exportar o documento \"%1\" para" #: ../code/commands/file-tasks/task-open.cpp:46 msgid "Querying \"%1\"..." msgstr "Consultando \"%1\"..." #: ../code/commands/file-tasks/task-open.cpp:103 #: ../code/operations/operation-open.cpp:474 #: ../code/operations/operation-open-multiple.cpp:180 msgid "Failed to open document \"%1\"" msgstr "Falha ao abrir o documento \"%1\"" #: ../code/commands/file-tasks/task-save.cpp:24 msgid "Choose a location to save document \"%1\" to" msgstr "Escolha um local para salvar o documento \"%1\" para" #. Help browser could not be invoked, show an error message to the user. #: ../code/commands/help-commands.cpp:70 msgid "There was an error displaying help." msgstr "Erro ao exibir a ajuda" #: ../code/commands/help-commands.cpp:93 msgid "Contributors:" msgstr "Contribuintes:" #: ../code/commands/help-commands.cpp:99 msgid "British English:" msgstr "Inglês britânico:" #: ../code/commands/help-commands.cpp:101 msgid "German:" msgstr "Alemão:" #: ../code/commands/help-commands.cpp:118 msgid "" "Permission to use, copy, modify, and/or distribute this software for any " "urpose with or without fee is hereby granted, provided that the above " "copyright notice and this permission notice appear in all copies.\n" "\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES " "WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY " "SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES " "WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION " "OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE." msgstr "" #: ../code/commands/subscription-commands.cpp:148 msgid "" "The connection to the publisher of this document has been lost. Further " "changes to the document could not be synchronized to others anymore, " "therefore the document cannot be edited anymore.\n" "\n" "Please note also that it is possible that not all of your latest changes " "have reached the publisher before the connection was lost." msgstr "" #: ../code/commands/synchronization-commands.cpp:30 msgid "Synchronization in progress... %1%%" msgstr "Sincronização em andamento... %1%%" #. Document cannot be used if an error happened #. during synchronization. #: ../code/commands/synchronization-commands.cpp:42 msgid "This document cannot be used." msgstr "Este documento não pode ser usado" #: ../code/commands/synchronization-commands.cpp:45 #: ../code/commands/user-join-commands.cpp:43 msgid "" "If you have an idea what could have caused the problem, then you may attempt " "to solve it and try again (after having closed this document). Otherwise it " "is most likely a bug in the software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and provide as much information as " "you can, including what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we can fix the problem in a " "later version. Thank you." msgstr "" #: ../code/commands/synchronization-commands.cpp:59 msgid "Synchronization failed: %1" msgstr "Falha de sincronização: %1" #. TODO: Adjust this for chat sessions #: ../code/commands/user-join-commands.cpp:38 msgid "" "You can still watch others editing the document, but you cannot edit it " "yourself." msgstr "" "Você ainda pode ver outros documentos, mas você não pode editá-lovocê mesmo" #: ../code/commands/user-join-commands.cpp:57 msgid "User Join failed: %1" msgstr "" #: ../code/commands/user-join-commands.cpp:64 msgid "Permissions are not granted to modify the document." msgstr "" #: ../code/core/browser.cpp:111 msgid "_Direct Connection" msgstr "_Conexão direta" #: ../code/core/browser.cpp:113 msgid "Host Name:" msgstr "" #: ../code/core/certificatemanager.cpp:83 #, c-format msgid "Failed to write Diffie-Hellman parameters to \"%s\": %s" msgstr "" #: ../code/core/certificatemanager.cpp:276 #, c-format msgid "Failed to read Diffie-Hellman parameters: %s" msgstr "" #: ../code/core/certificatemanager.cpp:338 msgid "File does not contain a X.509 certificate" msgstr "" #: ../code/core/certificatemanager.cpp:414 msgid "Certificate does not belong to the chosen key" msgstr "" #: ../code/core/foldermanager.cpp:322 msgid "The document has been removed from the server." msgstr "" #: ../code/core/header.cpp:203 msgid "_None" msgstr "" #: ../code/core/header.cpp:227 msgid "_File" msgstr "_Arquivo" #: ../code/core/header.cpp:230 msgid "_Open..." msgstr "_Abrir..." #: ../code/core/header.cpp:233 msgid "Open _Location..." msgstr "Abrir _Local..." #: ../code/core/header.cpp:237 msgid "Save _As..." msgstr "Salvar _Como..." #: ../code/core/header.cpp:241 ../code/core/iconmanager.cpp:43 msgid "Save All" msgstr "Salvar Tudo" #: ../code/core/header.cpp:241 msgid "Save all open files locally" msgstr "Salvar todos os arquivos abertos localmente" #: ../code/core/header.cpp:243 msgid "Export As _HTML..." msgstr "Exportar Como _HTML..." #: ../code/core/header.cpp:246 msgid "Connect _to Server..." msgstr "Conectar _ao Servidor" #: ../code/core/header.cpp:251 msgid "_Edit" msgstr "_Editar" #: ../code/core/header.cpp:259 msgid "_Find..." msgstr "_Encontrar" #: ../code/core/header.cpp:261 msgid "Find Ne_xt" msgstr "Localizar Pr_óximo" #: ../code/core/header.cpp:262 msgid "Find next match of phrase searched for" msgstr "Encontrar a próxima parte da frase procurada" #: ../code/core/header.cpp:265 msgid "Find Pre_vious" msgstr "Localizar Ante_rior" #: ../code/core/header.cpp:266 msgid "Find previous match of phrase searched for" msgstr "Encontrar a parte anterior da frase procurada" #: ../code/core/header.cpp:271 msgid "Find and Rep_lace..." msgstr "Localizar e Subs_tituir" #: ../code/core/header.cpp:275 msgid "Go to _Line..." msgstr "Vá para a _Linha..." #: ../code/core/header.cpp:279 msgid "Pr_eferences..." msgstr "Pr_eferências" #: ../code/core/header.cpp:281 msgid "_View" msgstr "_Ver" #: ../code/core/header.cpp:284 msgid "Reset User Colors" msgstr "Redefinir as cores do usuário" #: ../code/core/header.cpp:285 msgid "Hide user colors in current document" msgstr "Esconder as cores do usuário no documento atual" #: ../code/core/header.cpp:289 msgid "Fullscreen" msgstr "" #: ../code/core/header.cpp:290 msgid "Show the editing window in fullscreen mode" msgstr "" #: ../code/core/header.cpp:294 msgid "Zoom In" msgstr "" #: ../code/core/header.cpp:297 msgid "Zoom Out" msgstr "" #: ../code/core/header.cpp:300 msgid "View Toolbar" msgstr "Ver a Barra de Ferramentas" #: ../code/core/header.cpp:301 msgid "Whether to show the toolbar" msgstr "Desejo mostrar a barra de ferramentas" #: ../code/core/header.cpp:305 msgid "View Statusbar" msgstr "Ver a Barra de Status" #: ../code/core/header.cpp:306 msgid "Whether to show the statusbar" msgstr "Desejo mostrar a Barra de Status" #: ../code/core/header.cpp:310 msgid "View Document Browser" msgstr "Exibir o Documento no Navegador" #: ../code/core/header.cpp:311 msgid "Whether to show the document browser" msgstr "Desejo mostrar o navegador do documento" #: ../code/core/header.cpp:315 msgid "View Chat" msgstr "Exibir Chat" #: ../code/core/header.cpp:316 msgid "Whether to show the chat pane" msgstr "Desejo mostrar o painel do Chat" #: ../code/core/header.cpp:320 msgid "View Document User List" msgstr "Ver documento lista de usuário" #: ../code/core/header.cpp:321 msgid "Whether to show the user list for documents" msgstr "Desejo mostrar a lista de usuários para documentos" #: ../code/core/header.cpp:325 msgid "View Chat User List" msgstr "Ver lista de usuários do Chat" #: ../code/core/header.cpp:326 msgid "Whether to show the user list for the chat" msgstr "Desejo mostrar a lista de usuário para o chat" #: ../code/core/header.cpp:330 msgid "_Highlight Mode" msgstr "" #: ../code/core/header.cpp:336 msgid "_Help" msgstr "_Ajuda" #: ../code/core/header.cpp:339 msgid "_Contents" msgstr "_Conteúdo" #: ../code/core/header.cpp:340 msgid "Opens the Gobby manual" msgstr "" #: ../code/core/header.cpp:343 msgid "_About..." msgstr "_Sobre" #: ../code/core/header.cpp:344 msgid "Shows Gobby's copyright and credits" msgstr "Mostrar direitos autoriais e créditos do Gobby" #: ../code/core/iconmanager.cpp:49 msgid "User list" msgstr "Lista de Usuários" #: ../code/core/iconmanager.cpp:55 msgid "Document list" msgstr "Lista de Documentos" #: ../code/core/iconmanager.cpp:61 ../code/window.cpp:52 msgid "Chat" msgstr "" #: ../code/core/iconmanager.cpp:68 msgid "User Color Indicator" msgstr "Indicador de cor do usuário" #: ../code/core/selfhoster.cpp:103 msgid "Generating 2048-bit Diffie-Hellman parameters..." msgstr "" #: ../code/core/selfhoster.cpp:135 #, fuzzy msgid "Failed to generate Diffie-Hellman parameters" msgstr "Falha ao excluir nó \"%1\"" #: ../code/core/selfhoster.cpp:137 msgid "" "This means that Perfect Forward Secrecy (PFS) is not available. Restart " "Gobby to re-try generating the parameters. The specific error was:\n" "\n" "%1" msgstr "" #: ../code/core/selfhoster.cpp:262 msgid "" "In order to start sharing your documents, choose a private key and " "certificate or create a new pair in the preferences" msgstr "" #: ../code/core/selfhoster.cpp:282 #, fuzzy msgid "Failed to share documents" msgstr "Falha ao salvar o documento \"%1\"" #: ../code/core/sessionuserview.cpp:39 msgid "User List" msgstr "Lista de Usuários" #: ../code/core/statusbar.cpp:418 msgid "Ln %1, Col %2\t%3" msgstr "" #: ../code/core/statusbar.cpp:421 msgid "OVR" msgstr "" #: ../code/core/statusbar.cpp:421 msgid "INS" msgstr "" #: ../code/core/textsessionview.cpp:638 msgid "Text written by %1" msgstr "" #: ../code/core/textsessionview.cpp:644 msgid "Unowned text" msgstr "Texto sem dono" #: ../code/core/userlist.cpp:108 msgid "Users" msgstr "Usuários" #: ../code/dialogs/connection-dialog.cpp:26 msgid "Connect to Server" msgstr "Conectar ao Servidor" #: ../code/dialogs/connection-dialog.cpp:30 msgid "Please enter a host name with which to establish a connection." msgstr "" "Por favor, digite um nome de host com o qual deseja estabelecer uma conexão." #: ../code/dialogs/connection-dialog.cpp:32 msgid "_Remote Endpoint:" msgstr "" #: ../code/dialogs/document-location-dialog.cpp:28 msgid "Document Name:" msgstr "Nome do Documento" #: ../code/dialogs/document-location-dialog.cpp:155 msgid "Select document's target location" msgstr "Selecione o local de destino do documento" #: ../code/dialogs/document-location-dialog.cpp:157 msgid "Choose a directory to create the document into:" msgstr "" #: ../code/dialogs/document-location-dialog.cpp:163 msgid "Select documents' target location" msgstr "Selecione o local de destino dos documentos" #: ../code/dialogs/document-location-dialog.cpp:165 msgid "Choose a directory to create the documents into:" msgstr "Escolha um diretório para criar os documentos em:" #: ../code/dialogs/find-dialog.cpp:44 ../code/dialogs/find-dialog.cpp:142 msgid "Find" msgstr "Localizar" #: ../code/dialogs/find-dialog.cpp:47 msgid "_Search for:" msgstr "_Pesquisar por:" #: ../code/dialogs/find-dialog.cpp:49 msgid "Replace _with:" msgstr "Substituir _com:" #: ../code/dialogs/find-dialog.cpp:51 msgid "_Match case" msgstr "" #: ../code/dialogs/find-dialog.cpp:52 msgid "Match _entire word only" msgstr "" #: ../code/dialogs/find-dialog.cpp:53 msgid "Search _backwards" msgstr "" #: ../code/dialogs/find-dialog.cpp:54 msgid "Wra_p around" msgstr "" #: ../code/dialogs/find-dialog.cpp:100 msgid "Replace _All" msgstr "Substituir _Tudo" #: ../code/dialogs/find-dialog.cpp:102 msgid "_Replace" msgstr "_Substituir" #: ../code/dialogs/find-dialog.cpp:142 msgid "Replace" msgstr "Substituir" #: ../code/dialogs/find-dialog.cpp:161 ../code/dialogs/find-dialog.cpp:177 msgid "Phrase \"%1\" has not been found" msgstr "" #: ../code/dialogs/find-dialog.cpp:335 msgid "No occurrence has been replaced" msgstr "Nenhuma ocorrência foi substituída" #: ../code/dialogs/find-dialog.cpp:341 msgid "%1 occurrence has been replaced" msgid_plural "%1 occurrences have been replaced" msgstr[0] "%1 ocorrência foi substituída" msgstr[1] "%1 as ocorrências foram substituídas" #: ../code/dialogs/goto-dialog.cpp:26 msgid "Go to line" msgstr "Ir até a linha" #: ../code/dialogs/goto-dialog.cpp:29 msgid "Line _number:" msgstr "Número de _linhas:" #: ../code/dialogs/goto-dialog.cpp:50 msgid "Go To _Line" msgstr "Ir até a _Linha" #: ../code/dialogs/initial-dialog.cpp:76 msgid "Generating 2048-bit RSA private key..." msgstr "" #: ../code/dialogs/initial-dialog.cpp:99 #, fuzzy msgid "Failed to generate private key" msgstr "Falha ao excluir nó \"%1\"" #: ../code/dialogs/initial-dialog.cpp:102 msgid "" "%1\n" "\n" "You can try again to create a key in the Security tab of the preferences " "dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:141 msgid "Failed to generate self-signed certificate" msgstr "" #: ../code/dialogs/initial-dialog.cpp:144 msgid "" "%1\n" "\n" "You can try again to create a certificate in the Security tab of the " "preferences dialog." msgstr "" #: ../code/dialogs/initial-dialog.cpp:198 msgid "Choose a user color" msgstr "Escolha uma cor para o usuário" #: ../code/dialogs/initial-dialog.cpp:204 msgid "Welcome to Gobby" msgstr "Bem-vindo ao Gobby" #: ../code/dialogs/initial-dialog.cpp:216 msgid "" "Before we start, a few options need to be configured. You can later change " "them by choosing Edit ▸ Preferences from the menu." msgstr "" #: ../code/dialogs/initial-dialog.cpp:224 msgid "User Name" msgstr "Nome do Usuário" #: ../code/dialogs/initial-dialog.cpp:226 msgid "Your name as shown to other users." msgstr "Como seu nome será mostrado para outros usuários" #: ../code/dialogs/initial-dialog.cpp:235 msgid "User Color" msgstr "Cor do Usuário" #: ../code/dialogs/initial-dialog.cpp:237 msgid "The color with which text you have written is branded." msgstr "A cor com o texto que você escreveu é marcado" #: ../code/dialogs/initial-dialog.cpp:256 #, fuzzy msgid "Remote Connections" msgstr "Conexão Segura" #: ../code/dialogs/initial-dialog.cpp:262 #: ../code/dialogs/preferences-dialog.cpp:217 msgid "Allow remote users to edit local documents" msgstr "" #: ../code/dialogs/initial-dialog.cpp:268 msgid "Ask remote users for a password" msgstr "" #: ../code/dialogs/initial-dialog.cpp:273 #: ../code/dialogs/preferences-dialog.cpp:220 #, fuzzy msgid "Password:" msgstr "Senha Requerida" #: ../code/dialogs/initial-dialog.cpp:297 msgid "No authentication (Not recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:304 msgid "" "Don't authenticate ourselves to remote users. Data transfer will be " "unencrypted." msgstr "" #: ../code/dialogs/initial-dialog.cpp:313 msgid "Create a self-signed certificate (Recommended)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:321 msgid "" "It may take a minute or two until remote users can connect while the " "security certificate is being generated." msgstr "" #: ../code/dialogs/initial-dialog.cpp:331 msgid "Use an existing certificate (Expert option)" msgstr "" #: ../code/dialogs/initial-dialog.cpp:338 msgid "" "Use an existing private key and certificate for authentication. The files " "must be in PEM format." msgstr "" #: ../code/dialogs/initial-dialog.cpp:347 #: ../code/dialogs/preferences-dialog.cpp:766 msgid "Private key:" msgstr "" #: ../code/dialogs/initial-dialog.cpp:349 #: ../code/dialogs/preferences-dialog.cpp:772 msgid "Certificate:" msgstr "" #: ../code/dialogs/open-location-dialog.cpp:26 msgid "Open Location" msgstr "Abrir Localização" #: ../code/dialogs/open-location-dialog.cpp:27 msgid "Enter the _location (URI) of the file you would like to open:" msgstr "" #: ../code/dialogs/password-dialog.cpp:25 msgid "Password Required" msgstr "Senha Requerida" #: ../code/dialogs/password-dialog.cpp:31 msgid "Connection to host \"%1\" requires a password." msgstr "" #: ../code/dialogs/password-dialog.cpp:32 msgid "Invalid password for host \"%1\". Please try again." msgstr "Senha inválida para o host \"%1\". Por favor, tente novamente." #: ../code/dialogs/password-dialog.cpp:35 msgid "Server _Password:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:198 msgid "Settings" msgstr "Configurações" #: ../code/dialogs/preferences-dialog.cpp:199 #, fuzzy msgid "Remote Users" msgstr "Redefinir as cores do usuário" #: ../code/dialogs/preferences-dialog.cpp:200 #, fuzzy msgid "Local Documents" msgstr "Novo Documento" #: ../code/dialogs/preferences-dialog.cpp:202 msgid "User name:" msgstr "Nome do Usuário" #: ../code/dialogs/preferences-dialog.cpp:204 msgid "User color:" msgstr "Cor do usuário:" #: ../code/dialogs/preferences-dialog.cpp:206 msgid "Color intensity:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:208 msgid "Choose a new user color" msgstr "Escolha uma nova cor para o usuário" #: ../code/dialogs/preferences-dialog.cpp:209 msgid "Show cursors of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:210 msgid "Show selections of remote users" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:212 #, fuzzy msgid "Highlight current line of remote users" msgstr "Realçar linha atual" #: ../code/dialogs/preferences-dialog.cpp:214 msgid "Indicate cursor position of remote users in the scrollbar" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:219 msgid "Require remote users to enter a password" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:222 msgid "Port:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:226 msgid "Remember local documents after Gobby restart" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:227 #, fuzzy msgid "Local documents directory:" msgstr "Diretório do Host:" #: ../code/dialogs/preferences-dialog.cpp:423 msgid "Tab Stops" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:424 msgid "Indentation" msgstr "Indentação" #: ../code/dialogs/preferences-dialog.cpp:425 msgid "Home/End Behavior" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:426 msgid "File Saving" msgstr "Salvar Arquivo" #: ../code/dialogs/preferences-dialog.cpp:427 msgid "_Tab width:" msgstr "Larguda da _Tabulação" #: ../code/dialogs/preferences-dialog.cpp:429 msgid "Insert _spaces instead of tabs" msgstr "Inserir _espaços em vez de tabulações " #: ../code/dialogs/preferences-dialog.cpp:430 msgid "Enable automatic _indentation" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:431 msgid "Smart _home/end" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:432 msgid "Enable _automatic saving of documents" msgstr "Ativar _salvar documentos automaticamente" #: ../code/dialogs/preferences-dialog.cpp:434 msgid "Autosave interval in _minutes:" msgstr "Salvar automaticamente no intervalo de _minutos" #: ../code/dialogs/preferences-dialog.cpp:455 msgid "" "With this option enabled, Home/End keys move to first/last character before " "going to the start/end of the line." msgstr "" "Com esta opção habilitada, chaves Home/End movem-se para o primeiro/último " "caractereindo para o início/fim da linha." #: ../code/dialogs/preferences-dialog.cpp:525 msgid "Text Wrapping" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:526 msgid "Line Numbers" msgstr "Número de Linhas" #: ../code/dialogs/preferences-dialog.cpp:527 msgid "Current Line" msgstr "Linha Atual" #: ../code/dialogs/preferences-dialog.cpp:528 msgid "Right Margin" msgstr "Margem Direita" #: ../code/dialogs/preferences-dialog.cpp:529 msgid "Bracket Matching" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:530 msgid "Whitespace Display" msgstr "Mostrar espaços em branco" #: ../code/dialogs/preferences-dialog.cpp:531 msgid "Enable text wrapping" msgstr "Ativar quebra-linha" #: ../code/dialogs/preferences-dialog.cpp:532 msgid "Do not split words over two lines" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:533 msgid "Display line numbers" msgstr "Mostrar números de linhas" #: ../code/dialogs/preferences-dialog.cpp:534 msgid "Highlight current line" msgstr "Realçar linha atual" #: ../code/dialogs/preferences-dialog.cpp:535 msgid "Display right margin" msgstr "Mostrar margem direita" #: ../code/dialogs/preferences-dialog.cpp:536 msgid "Right margin at column:" msgstr "Margem direita na coluna" #: ../code/dialogs/preferences-dialog.cpp:537 msgid "Highlight matching bracket" msgstr "Fechar colchete correspondente" #: ../code/dialogs/preferences-dialog.cpp:589 msgid "Display no whitespace" msgstr "Não mostrar espaços em branco" #: ../code/dialogs/preferences-dialog.cpp:592 msgid "Display spaces" msgstr "Mostrar espaçamentos" #: ../code/dialogs/preferences-dialog.cpp:596 msgid "Display tabs" msgstr "Mostrar tabulações" #: ../code/dialogs/preferences-dialog.cpp:600 msgid "Display tabs and spaces" msgstr "Mostrar tabulações e espaços" #: ../code/dialogs/preferences-dialog.cpp:651 msgid "Toolbar" msgstr "Barra de Ferramentas" #: ../code/dialogs/preferences-dialog.cpp:652 msgid "Font" msgstr "Fontes" #: ../code/dialogs/preferences-dialog.cpp:653 msgid "Color Scheme" msgstr "Esquema de cores" #: ../code/dialogs/preferences-dialog.cpp:661 msgid "Show text only" msgstr "Mostrar apenas texto" #: ../code/dialogs/preferences-dialog.cpp:663 msgid "Show icons only" msgstr "Mostrar apenas ícones" #: ../code/dialogs/preferences-dialog.cpp:665 msgid "Show both icons and text" msgstr "Mostrar os ícones e texto" #: ../code/dialogs/preferences-dialog.cpp:667 msgid "Show text besides icons" msgstr "Mostrar texto além de ícones" #: ../code/dialogs/preferences-dialog.cpp:756 msgid "Trusted CAs" msgstr "CAs confiáveis" #: ../code/dialogs/preferences-dialog.cpp:757 msgid "Secure Connection" msgstr "Conexão Segura" #: ../code/dialogs/preferences-dialog.cpp:758 #, fuzzy msgid "Authentication" msgstr "Indentação" #: ../code/dialogs/preferences-dialog.cpp:759 msgid "Select a file containing trusted CAs" msgstr "Selecionar um arquivo contendo dados confiáveis CAs " #: ../code/dialogs/preferences-dialog.cpp:764 msgid "None" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:765 msgid "Use a certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:767 msgid "Select a private key file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:769 #: ../code/dialogs/preferences-dialog.cpp:776 #, fuzzy msgid "Create New..." msgstr "Criar Diretório..." #: ../code/dialogs/preferences-dialog.cpp:773 msgid "Select a certificate file" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:801 msgid "Use TLS if possible" msgstr "Usar TLS se possível" #: ../code/dialogs/preferences-dialog.cpp:804 msgid "Always use TLS" msgstr "Sempre usar TLS" #: ../code/dialogs/preferences-dialog.cpp:892 msgid "Error reading file:" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:916 msgid "2048-bit RSA private key is being generated, please wait..." msgstr "" #: ../code/dialogs/preferences-dialog.cpp:948 msgid "Select a location for the generated key" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:966 msgid "Select a location for the generated certificate" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:1068 msgid "Preferences" msgstr "Preferências" #: ../code/dialogs/preferences-dialog.cpp:1073 msgid "User" msgstr "Usuário" #: ../code/dialogs/preferences-dialog.cpp:1074 msgid "Editor" msgstr "" #: ../code/dialogs/preferences-dialog.cpp:1075 msgid "View" msgstr "Exibir" #: ../code/dialogs/preferences-dialog.cpp:1076 msgid "Appearance" msgstr "Aparência" #: ../code/dialogs/preferences-dialog.cpp:1077 msgid "Security" msgstr "Segurança" #: ../code/main.cpp:194 msgid "Gobby options" msgstr "Opções do Gobby" #: ../code/main.cpp:194 msgid "Options related to Gobby" msgstr "Opções relacionadas do Gobby" #: ../code/main.cpp:199 msgid "Display version information and exit" msgstr "Exibir informação da versão e sair" #: ../code/main.cpp:206 msgid "Also start a new Gobby instance when there is one running already" msgstr "" #: ../code/main.cpp:214 msgid "Connect to given host on startup, can be given multiple times" msgstr "" #: ../code/main.cpp:215 msgid "HOSTNAME" msgstr "" #: ../code/operations/operation-delete.cpp:65 msgid "Removing node \"%1\"..." msgstr "Removendo nó \"%1\"..." #: ../code/operations/operation-delete.cpp:75 msgid "Failed to delete node \"%1\"" msgstr "Falha ao excluir nó \"%1\"" #: ../code/operations/operation-export-html.cpp:168 #, c-format msgid "written by: %s" msgstr "escrito por: %s" #: ../code/operations/operation-export-html.cpp:241 msgid "" msgstr "" #. %1$s is session name/hostname #. %2$s is path within the session #. %3$s is current date as formatted by %c, #. %4$s is a link to the gobby site, it must be present because #. we need to handle that manually to insert a hyperlink #. instead of just printf'ing it. #: ../code/operations/operation-export-html.cpp:254 #, c-format msgid "Document generated from %1$s:%2$s at %3$s by %4$s" msgstr "Documento gerado a partir de %1$s:%2$s at %3$s by %4$s" #: ../code/operations/operation-export-html.cpp:395 msgid "Participants" msgstr "Participantes" #: ../code/operations/operation-export-html.cpp:475 msgid "Exporting document \"%1\" to \"%2\" in HTML..." msgstr "Exportando o documento \"%1\" to \"%2\" em HTML..." #: ../code/operations/operation-export-html.cpp:536 msgid "Failed to export document \"%1\" to HTML" msgstr "Falha ao exportar documento \"%1\" para HTML" #: ../code/operations/operation-new.cpp:75 msgid "Creating directory \"%1\"..." msgstr "Criando diretório \"%1\"..." #: ../code/operations/operation-new.cpp:76 msgid "Creating document \"%1\"..." msgstr "Criação de documento \"%1\"..." #: ../code/operations/operation-new.cpp:88 msgid "Failed to create directory \"%1\"" msgstr "Falha ao criar diretório \"%1\"" #: ../code/operations/operation-new.cpp:89 msgid "Failed to create document \"%1\"" msgstr "Falha ao criar documento \"%1\"" #. Translators: This is the 8 bit encoding that is tried when #. autodetecting a file's encoding. #: ../code/operations/operation-open.cpp:38 msgid "ISO-8859-1" msgstr "" #: ../code/operations/operation-open.cpp:114 msgid "Opening document \"%1\"..." msgstr "Abrindo documento \"%1\"..." #: ../code/operations/operation-open.cpp:134 msgid "" "The directory into which the new document was supposed to be inserted has " "been removed" msgstr "O diretório no qual o suposto novo documento foi inseridofoi removido" #: ../code/operations/operation-open.cpp:323 msgid "The file contains data not in the specified encoding" msgstr "O arquivo não contém dados no encoding especificado" #: ../code/operations/operation-open.cpp:334 msgid "" "The file either contains data in an unknown encoding, or it contains binary " "data." msgstr "" "O arquivo também contém dados em uma codificação desconhecida, ou que contém " "o bináriodados." #: ../code/operations/operation-open-multiple.cpp:91 msgid "Parent folder was removed" msgstr "Pasta pai foi removida" #: ../code/operations/operation-open-multiple.cpp:193 msgid "Failed to open multiple documents" msgstr "Falha ao abrir vários documentos" #: ../code/operations/operation-save.cpp:97 msgid "Saving document \"%1\" to \"%2\"..." msgstr "Salvar documento \"%1\" de \"%2\"..." #: ../code/operations/operation-save.cpp:226 msgid "" "The document contains one or more characters that cannot be encoded in the " "specified character coding." msgstr "" "O documento contém um ou mais caracteres que não podem ser codificados " "nacodificação de caractere especificado." #: ../code/operations/operation-save.cpp:287 msgid "Failed to save document \"%1\"" msgstr "Falha ao salvar o documento \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:33 msgid "Invalid path: \"%1\"" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:45 #, fuzzy msgid "Invalid path component: \"%1\"" msgstr "Falha ao abrir o documento \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:135 #: ../code/operations/operation-subscribe-path.cpp:200 #, fuzzy msgid "Subscribing to \"%1\"..." msgstr "Consultando \"%1\"..." #: ../code/operations/operation-subscribe-path.cpp:149 #: ../code/operations/operation-subscribe-path.cpp:212 #, fuzzy msgid "Failed to connect to \"%1\"" msgstr "Falha ao criar diretório \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:164 msgid "URI scheme \"%1\" not supported" msgstr "" #: ../code/operations/operation-subscribe-path.cpp:193 #, fuzzy msgid "Connecting to \"%1\"..." msgstr "Conexão para \"%1\" falhou" #: ../code/operations/operation-subscribe-path.cpp:220 #: ../code/operations/operation-subscribe-path.cpp:319 #: ../code/operations/operation-subscribe-path.cpp:356 #: ../code/operations/operation-subscribe-path.cpp:452 #: ../code/operations/operation-subscribe-path.cpp:472 #, fuzzy msgid "Could not subscribe to \"%1\"" msgstr "Não foi possível resolver \"%1\"" #: ../code/operations/operation-subscribe-path.cpp:322 #: ../code/operations/operation-subscribe-path.cpp:358 #, fuzzy msgid "Path \"%1\" does not exist" msgstr "Dispositivo \"%1\" não existe" #: ../code/util/file.cpp:65 ../code/util/file.cpp:74 msgid "Could not create directory \"%1\": %2" msgstr "Não foi possível criar o diretório \"%1\": %2" #: ../code/util/uri.cpp:91 msgid "Device \"%1\" does not exist" msgstr "Dispositivo \"%1\" não existe" #: ../code/window.cpp:104 msgid "This Computer" msgstr "" #: ../code/window.cpp:129 msgid "Document Browser" msgstr "Navegador do documento" #: ../code/window.cpp:182 msgid "You are still connected to a session" msgstr "Você ainda está conectado a uma sessão" #: ../code/window.cpp:190 msgid "Do you want to close Gobby nevertheless?" msgstr "Você quer fechar Gobby?" #: ../code/window.cpp:196 msgid "C_ancel" msgstr "C_ancelar" #: ../gobby-0.5.desktop.in.h:1 msgid "Gobby" msgstr "" #: ../gobby-0.5.desktop.in.h:2 msgid "Collaborative Editor" msgstr "Editor colaborativo" #: ../gobby-0.5.desktop.in.h:3 msgid "Gobby Collaborative Editor (0.5)" msgstr "" #: ../gobby-0.5.desktop.in.h:4 msgid "Edit text files collaboratively" msgstr "Editar arquivos de texto de forma colaborativa" #, fuzzy #~ msgid "Failed to resolve \"%1\": %2" #~ msgstr "Não foi possível resolver \"%1\"" #~ msgid "Resolving \"%1\"..." #~ msgstr "Resolvendo \"%1\"..." gobby-0.5.0/icons/0000755000175000017500000000000012376162133010736 500000000000000gobby-0.5.0/icons/Makefile.in0000644000175000017500000004423412376162114012731 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ SUBDIRS = hicolor HighContrastLargePrint HighContrastLargePrintInverse all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done 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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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: ctags-recursive $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive 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: gobby-0.5.0/icons/hicolor/0000755000175000017500000000000012376162133012375 500000000000000gobby-0.5.0/icons/hicolor/Makefile.in0000644000175000017500000004531612376162114014372 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/hicolor DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ SUBDIRS = 48x48 scalable gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/hicolor/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done 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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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: ctags-recursive $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-data-am install-strip tags-recursive \ uninstall-am .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-hook \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-hook install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi # 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: gobby-0.5.0/icons/hicolor/48x48/0000755000175000017500000000000012376162133013174 500000000000000gobby-0.5.0/icons/hicolor/48x48/Makefile.in0000644000175000017500000004423512376162114015170 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/hicolor/48x48 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ SUBDIRS = apps actions status all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/hicolor/48x48/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/48x48/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done 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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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: ctags-recursive $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive 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: gobby-0.5.0/icons/hicolor/48x48/apps/0000755000175000017500000000000012376162133014137 500000000000000gobby-0.5.0/icons/hicolor/48x48/apps/gobby-0.5.png0000644000175000017500000000615612364474462016207 00000000000000PNG  IHDR00WsRGBbKGD pHYs B(xtIME   IDAThpTu?o{vWҢHB c;!vĉq v!xihf:n!nݦ%V Ǹ&a$ !I{w.BH837{ᄏs\K-,3gζYf|@J+RJٶ]k( Z>oN0|텶zVek ѮOLmwO7źP(`Y2:S@8k<\JɆ6PWWf?Xѥl<9BS9 ٚG>4P(eYg|w&qg΋a$QJM_f̓SCK̛Z_k}JyW.2~btϓ~rX켞/d~?UUm"o5wojlq+`RGeoĻ|AT~+Rn <0 [S Fzv⊛5w͉.Rpdđds#'/Be4:M#|̝{9/S[[Z^y؜"re\E*EBx8;_sx"!⚆SJC$ ٷ?$I䬯[oA)E6ct_uQT玥rѧ]CCιbժU 444EO[ҊgPWW{zj,i.OW{{;ǏHcc#gX95bFBE$~'A)#ÙD٧O!"8By ]=2-[~z Sf ye-;^cdxӛUgUU{ypb*ˡc@hko 4ꑷJj*yì_ZmKNmlÈC:!NǡϢQUU緰 /.2Z9dRVco~+/RdՑxMHW OKI 8.Ṭv$CN*yңNDkb <8G"OG-K9V:OzTސ$ R[[Cs  vgF&`V ?EBI. D"xRw£3@u=A__߸9uCE Qe&lUV|{ϕu \:0#c̟wI뱯'OBs0M40 0Ks;iI"S _&MW7͚P.Kd>$U, LWv;,u1d$Ǐl24M;s;. ZR$<}/iN>)eapױ$Czq3]m pw,sqyاQBZ"cHtU ;v@u"}${;IPB4+K79 .T?yw^{{6Iec%r"s)dH)2NT! N CA̯l|/aҥ @:1DÜf"~󅇾 @<SM]E6±=+oS`0=HB$hHH )Ri;MxF=s9O~tuuerWͥiUȩu̺btkѸ馛}3\ym mgڜU7ЗCzWҦȻyrn lѱd2Adt_~x-W~hr\$+Wʕ+\sȑyXiN/#>/p-llaW"q󔕕[oSܱv#Sg]1H&ӄáXn]?=զi^{?oy@x቉Ŧ#H8J)|qͽ"e-+icdÆ O<ĞHZ&P3%$aO|:::HR]aYeF? %CO )l ZF閎ѭ↕y,H`P!%U|KQYYY*|>gѣ$b"p]ו٬X֭[ԕ'NX`0)RLMDeLm`455 TTT`9B!0x)Blۦ}50/*fΜ^kk3 C3 C)r]W !Rl3nq|]|>M=>52(IO@I"؅Xh|4% L-1 }Tʒ+Js J %KrI.pZHnIENDB`gobby-0.5.0/icons/hicolor/48x48/apps/Makefile.in0000644000175000017500000003256612376162114016137 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/hicolor/48x48/apps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ icondir = $(datadir)/icons/hicolor/48x48/apps icon_DATA = gobby-0.5.png EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/hicolor/48x48/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/48x48/apps/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-iconDATA 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-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA # 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: gobby-0.5.0/icons/hicolor/48x48/apps/Makefile.am0000644000175000017500000000014312364474462016121 00000000000000icondir = $(datadir)/icons/hicolor/48x48/apps icon_DATA = gobby-0.5.png EXTRA_DIST = $(icon_DATA) gobby-0.5.0/icons/hicolor/48x48/status/0000755000175000017500000000000012376162133014517 500000000000000gobby-0.5.0/icons/hicolor/48x48/status/Makefile.in0000644000175000017500000003262312376162114016511 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/hicolor/48x48/status DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ icondir = $(datadir)/gobby-0.5/icons/hicolor/48x48/status icon_DATA = user-color-indicator.png EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/hicolor/48x48/status/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/48x48/status/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-iconDATA 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-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA # 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: gobby-0.5.0/icons/hicolor/48x48/status/user-color-indicator.png0000644000175000017500000000463112364474462021225 00000000000000PNG  IHDR00WsBIT|d pHYs))+ܲtEXtSoftwarewww.inkscape.org< IDATh՚MlE=vdQEX+!  \+.Q. 0r%ₖ\#-r0 8)6CuMWXvTz﷾RJBTIiqX~6Οw\JH  ʾ={d| xh>a9[j?< <fM"Itn_# /= \R~kM*S8<@< unC|?@TLq aHu)5mR,jɻ, 4= /At(RDTDMcX[+׀&ۭlΙNaټβg8 Ǐ̌VKq~k@aDogB&'L۳fSϞ_ 5`^\탱1eV6wT$gbbڜ !^6Cci-ҧVȈ2'W$Q&cnJ7Tl_<+ij0>!*IP^!Np> SS x=Lw]Ja$6:zj &˰*_ua|\+CXGaTZA62>]qhS֜byRu^zIv;7abک=\ iad$`ttԔgT8w Z1Wތ 0?IjqMa8ExE:\~$SfBe}Ӹ,Ir iUysNjW\h0?'a&pm6qyfv-3iGi<8*P>x<F7^v[}m) ŅbPA3UpfVVtFTԶ_ȯsDLl.5 !!QAP$)B)Sk3Mw9$MrCC-(%xVˊ'i5hNLkє>Zl*(R!^W jJL e&djF70URh mΫip6 Sr9IЎaYk@1Ҳ LIY5ز裥o`:HՃa$L 62 4Bm?v pP Xo)N6M5 9gphiz8ӥadʴ2i#ۭiDdKܟ軽ىo$m&~)eG[n]'MmI)lO.hStF- [n睐0VVn2̊r)e i2aXXMd'4Lb,|ٔ;"x:G[/kYATsH_n:? Q)e"xlqW_ؘq"=/n7N67|Q_f鴔r%#izLN.8 k{ewnZڠZڂFέ[sllKJ)]! $q&BlYEtQ(ˋ|9°qaVЂFJP)e}&'/uۼX(V˗_^ˤbPGػw.A"}.[&Nq·૯z›|mVߟaϞLNVoڙ:fy:mVĶA0Q)FG;A Ofڟ=vlBͿ5X8ttoIENDB`gobby-0.5.0/icons/hicolor/48x48/status/Makefile.am0000644000175000017500000000017212364474462016503 00000000000000icondir = $(datadir)/gobby-0.5/icons/hicolor/48x48/status icon_DATA = user-color-indicator.png EXTRA_DIST = $(icon_DATA) gobby-0.5.0/icons/hicolor/48x48/actions/0000755000175000017500000000000012376162133014634 500000000000000gobby-0.5.0/icons/hicolor/48x48/actions/Makefile.in0000644000175000017500000003264712376162114016634 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/hicolor/48x48/actions DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ icondir = $(datadir)/gobby-0.5/icons/hicolor/48x48/actions icon_DATA = chat.png document-list.png user-list.png EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/hicolor/48x48/actions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/48x48/actions/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-iconDATA 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-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA # 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: gobby-0.5.0/icons/hicolor/48x48/actions/user-list.png0000644000175000017500000000526111517044575017222 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME!+ CIDATh͙{lS?ׯ8N;! @@RcݣimWm*6U[=*4V u@;.P&<Iĉ;so<=9N|w/\-@P@h h|F<ޔzXE&d ~U|.<ϺC] 5̿F!l~c } +בvM'ـu o`TVgxsʲץNML!p.p'2`T8pjh# q5NOIOI.߭4OE2^6|s"MIKpz4%Ҵ Kn+]NdL(?m,e)%:֘tR;B~9E &Pn,MFN ~h\Q-.q@D&ȄMȫ!M %RH)GhJ4g~.D)" UJ6ɌLtЙaF~E9>.ρ?'0] *U_emj)⹝T;Ϻr3 pvw"8CMSgޏްnO)'<~/M?)9pT07$}lʇ':2'T%N~ؠ4* kBK]8MAӖ-7g:=E)snt8RǁWtr-Nh|9) ΚۜNS`sXS_ V= %xV_$6ݷK,\GhL}j9ɒw:bסN.F-Xgס |KL.'vsYUJyo^- mebut8q EaWe: aߺb={xH@V7,k #`]ߞy~_Pa{9$\cwm7"w8TU3硻9teli0skT|Ty_`A4&)e8eTXTRAZB5o޼s͖eK_=s;ZSydrsp8]PGHHS3Gh%;1?把ORr O=TRjbR–H$N$u88:BӔPRH ?˕ ]KKKۗ.] ܕR|jhEJeJi===`{{{N4͊Fx2Ϛ<|ҀnJȨ*3@>,`3Z,^hv;111vv;XVhkkpsu}(u_wDžWMz>^ߌ!33 222HMMeĈ)ŋTWWSUUűcpy- ȘT^PNR^W=jVǏWj̘1J 2 Drt:%.KXNц_N8I<z7UBBI I6Uiir*Xv{hsX> f3;;[9*r5ej_сbQ *555~vM6)ŢIO*~5k֨(uiu=V&o=СU^N~eeep}/..1z>@۶m ͖-[t//x+)rrr jVZG/P׫-[KBsߏj%~ lo,`I󉉉!$ :::vSLaڵ7E@ZXX7o&$<*5s-5ie;~2Z hy&۷oח'd|zIcUw_twc;PAX`5@AAA@ nJ{{;b:76,z}O{7 -oiiif8weŊzW \|?VLz"Cр]/7nPPPW x1n"2Sѽ^l~&CqNΑBHv*33^}ӦMx.=\`8C&<=ETVUTT ~ΝvX%Px(~9=|;)>Ԝh gwy_%%%}Az(LzsDCǃZhQq"S?~ Γ2y>!PDUUU4SQshwDlUnn}<&Md70 H7䁢1.Fӯ^IeddP$d ^&CJ6{;wTJ)uel6c;*x8TGw@͚5K߿_\4o4]yTĞ1>6?bf,d#C[ߓyc֣PY/eIENDB`gobby-0.5.0/icons/hicolor/48x48/actions/document-list.png0000644000175000017500000000622211517044575020060 00000000000000PNG  IHDR00WsRGB pHYs B(xtIMEXE $IDAThKl]]]~_C|cBXRFF0b"&bнb._6h6`fXD6hG6vnUo6Uv;$$Oծr?|eG=BB|S˲888e_lV|<#|k׮[oq֭[ lL\.72lek׮O?TBQU<(0  /Q'l0 Ldz< Bf7@:wIHDgaaZ,S,y&.\`jj !BlۦhP׹z*^a:9;O\nq5W_f!hZ|b1 @QL$NBPh6d2ϓj5FaZ>㻎fT*E$!NJYXX7|({'?Qgh9¿ y?N4Ų,$=mcY/ovpnnEG ̜3_@UUn޼Idggj @44M`0x6M۶  wEn=otĉ3<L93|Z\\?}矩jb1áK nܸA*²,L4MbOƶmOJO?M^>sΟ>  `}}UUZrƍ9 4d2I'#IgX,˔J%,"i?^xAOT*`߉NaiJs1>yEQHRDQ2 $˗ygm@ `0xH?{B3`9!9>F1ZM'2x(#B7MIt]dY& i~*B.s/N.NOѠRP(X]]!lEQH#\.,,,$I vƏ{ &@X,z H@T*HXdqqqD붷 c~~-R C{fggXdN 0SUU677ZhЅ,b~~ 2 [[[E(Jz!{FSG%VTzbʦiΜ9C?Sc&333HDXD$fgg BHp8Q4f!;=nYzn}]#&v7n߾M>jtftp]B6`˾}a~B @u&ǎc{{{b9pmX,F8&JeY̰aD"N8q7X.7ҟy=yG9~8eq曉[Vr9$IB$.FX,ɓ'Bfy7L$Ƹfd2I:&iPh@cee49qkkk#Bw$ӧO: ~9{7o>lqQw㶻mZ^G-h4ʓO>(츞MnnE:n8 QvmvhBvww4mOH$B*RPUO<xB@\&Q,IRr¤x@;;;z+揄=}x= AVZ4fnK2`x\Ća/N!IGqd2Ν;i s)N)ߧi1װjJ&AS,BP(eYhix҆Ovnw,N֖v=~uvvv0 t:MZ^sCZ[]tD(='8ař~!nK\(r˲PUu|d2b1~'rrd2f$ dY>'M}۷G:U_0.[[[GVz)&%H$B#J!2ƣQ^N[;8j.--qi\|5:rb1qےx'5ǚVUUU@MhlYV|[˭-,Qd2j5.'O<bx_nNw,pQ\ XE\fzz4=dY$ey, ! ~) {i.E3Eբ\.{1ʶCvV~ :p{Q0Z-hC(vT4_ ]|~p^x}8wk9W? y5~+ۘ_z76uZ<#>l<9^[4{~+!6SIENDB`gobby-0.5.0/icons/hicolor/48x48/Makefile.am0000644000175000017500000000003612364474462015157 00000000000000SUBDIRS = apps actions status gobby-0.5.0/icons/hicolor/scalable/0000755000175000017500000000000012376162133014143 500000000000000gobby-0.5.0/icons/hicolor/scalable/Makefile.in0000644000175000017500000004424612376162114016141 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/hicolor/scalable DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ SUBDIRS = apps actions status all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/hicolor/scalable/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/scalable/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done 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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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: ctags-recursive $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive 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: gobby-0.5.0/icons/hicolor/scalable/apps/0000755000175000017500000000000012376162133015106 500000000000000gobby-0.5.0/icons/hicolor/scalable/apps/Makefile.in0000644000175000017500000003260212376162115017076 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/hicolor/scalable/apps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ icondir = $(datadir)/icons/hicolor/scalable/apps icon_DATA = gobby-0.5.svg EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/hicolor/scalable/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/scalable/apps/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-iconDATA 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-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA # 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: gobby-0.5.0/icons/hicolor/scalable/apps/Makefile.am0000644000175000017500000000014612364474462017073 00000000000000icondir = $(datadir)/icons/hicolor/scalable/apps icon_DATA = gobby-0.5.svg EXTRA_DIST = $(icon_DATA) gobby-0.5.0/icons/hicolor/scalable/apps/gobby-0.5.svg0000644000175000017500000015003612364474462017166 00000000000000 image/svg+xml image/svg+xml image/svg+xml gobby-0.5.0/icons/hicolor/scalable/status/0000755000175000017500000000000012376162133015466 500000000000000gobby-0.5.0/icons/hicolor/scalable/status/user-color-indicator.svg0000644000175000017500000001700512364474462022206 00000000000000 image/svg+xml gobby-0.5.0/icons/hicolor/scalable/status/Makefile.in0000644000175000017500000003263712376162115017466 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/hicolor/scalable/status DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ icondir = $(datadir)/gobby-0.5/icons/hicolor/scalable/status icon_DATA = user-color-indicator.svg EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/hicolor/scalable/status/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/scalable/status/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-iconDATA 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-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA # 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: gobby-0.5.0/icons/hicolor/scalable/status/Makefile.am0000644000175000017500000000017512364474462017455 00000000000000icondir = $(datadir)/gobby-0.5/icons/hicolor/scalable/status icon_DATA = user-color-indicator.svg EXTRA_DIST = $(icon_DATA) gobby-0.5.0/icons/hicolor/scalable/actions/0000755000175000017500000000000012376162133015603 500000000000000gobby-0.5.0/icons/hicolor/scalable/actions/Makefile.in0000644000175000017500000003266312376162115017602 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/hicolor/scalable/actions DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ icondir = $(datadir)/gobby-0.5/icons/hicolor/scalable/actions icon_DATA = chat.svg document-list.svg user-list.svg EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/hicolor/scalable/actions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/hicolor/scalable/actions/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-iconDATA 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-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA # 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: gobby-0.5.0/icons/hicolor/scalable/actions/user-list.svg0000644000175000017500000005711311517044575020207 00000000000000 image/svg+xml image/svg+xml image/svg+xml gobby-0.5.0/icons/hicolor/scalable/actions/chat.svg0000644000175000017500000001654511517044575017203 00000000000000 image/svg+xml gobby-0.5.0/icons/hicolor/scalable/actions/document-list.svg0000644000175000017500000017771711517044575021064 00000000000000 image/svg+xml gobby-0.5.0/icons/hicolor/scalable/actions/Makefile.am0000644000175000017500000000021612364474462017566 00000000000000icondir = $(datadir)/gobby-0.5/icons/hicolor/scalable/actions icon_DATA = chat.svg document-list.svg user-list.svg EXTRA_DIST = $(icon_DATA) gobby-0.5.0/icons/hicolor/scalable/Makefile.am0000644000175000017500000000003612364474462016126 00000000000000SUBDIRS = apps actions status gobby-0.5.0/icons/hicolor/Makefile.am0000644000175000017500000000065711517044575014366 00000000000000SUBDIRS = 48x48 scalable gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/hicolor install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi gobby-0.5.0/icons/HighContrastLargePrint/0000755000175000017500000000000012376162133015323 500000000000000gobby-0.5.0/icons/HighContrastLargePrint/Makefile.in0000644000175000017500000004541212376162112017313 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/HighContrastLargePrint DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ SUBDIRS = 48x48 scalable gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/HighContrastLargePrint all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/HighContrastLargePrint/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrint/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done 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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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: ctags-recursive $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-data-am install-strip tags-recursive \ uninstall-am .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-hook \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-hook install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi # 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: gobby-0.5.0/icons/HighContrastLargePrint/48x48/0000755000175000017500000000000012376162133016122 500000000000000gobby-0.5.0/icons/HighContrastLargePrint/48x48/Makefile.in0000644000175000017500000004430312376162112020110 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/HighContrastLargePrint/48x48 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ SUBDIRS = apps actions all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/HighContrastLargePrint/48x48/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrint/48x48/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done 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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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: ctags-recursive $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive 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: gobby-0.5.0/icons/HighContrastLargePrint/48x48/apps/0000755000175000017500000000000012376162133017065 500000000000000gobby-0.5.0/icons/HighContrastLargePrint/48x48/apps/gobby-0.5.png0000644000175000017500000000463412364474462021134 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME.-}Hn .IDATh޽kLUW^,h2MijA;*-jiUƤ j:mt2IS&|MӴF ڴ"ikQbբcA% *vryykIT&ɣ$t%j< ( Qx< dپaTMLs5440gٲejhhDSo.}фv}AI3 `6p:c^ KUU=,IZmFx%)]_%e<7MTPP`Y0//o\/fT+IU IU5?%Q|Sssx@SͷO8zJ֢K,I?>)0 C~WVwS %;;Xv p/^aҥ_ݻwS__޽{z#g`vIxx5VXX+nSRRBff9o0VV֭[p(??_v}׊_nݒ$;v@rrMz0 ksT-IgϞ ݮCusss-Z$@5oKV^=&/}\.ΐBf)ƦM(..歷OfŊJPPc۶mx<7F 'dggt\XXmmmn\.5eF_j*@.\-\P~'Iҹs&Ս(vtt3bcc~:8K%<N6n{DZ[[1I3d^Jaa,d۶mcҥJbL̼ywttqF9Yj9ygFDž$]{OxA֯ өaVTTʅn۷Y7`-ŋ/3g ـ,_K.QSScpE|3͛7̕$''SYYɓO>'|Bff&Ñ3gZciii[A߫$5Iүϊ0-YD֮];bرcPAkkkajoo.D>IjjjR^^u1ͦ'O|mmf̘!@Og}wƻ)++… ٳ{RRRyuq5OGE.]BkHBBvu/4 #_8͗T$}g,p8k׮]cq!\.]rES$͒"F:$ڢk֬QNNU>ׯ?hzG/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/HighContrastLargePrint/48x48/apps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ icondir = $(datadir)/icons/HighContrastLargePrint/48x48/apps icon_DATA = gobby-0.5.png EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/HighContrastLargePrint/48x48/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrint/48x48/apps/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-iconDATA 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-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA # 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: gobby-0.5.0/icons/HighContrastLargePrint/48x48/apps/Makefile.am0000644000175000017500000000016212364474462021050 00000000000000icondir = $(datadir)/icons/HighContrastLargePrint/48x48/apps icon_DATA = gobby-0.5.png EXTRA_DIST = $(icon_DATA) gobby-0.5.0/icons/HighContrastLargePrint/48x48/actions/0000755000175000017500000000000012376162133017562 500000000000000gobby-0.5.0/icons/HighContrastLargePrint/48x48/actions/Makefile.in0000644000175000017500000003274312376162112021555 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/HighContrastLargePrint/48x48/actions DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrint/48x48/actions icon_DATA = chat.png document-list.png user-list.png EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/HighContrastLargePrint/48x48/actions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrint/48x48/actions/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-iconDATA 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-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA # 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: gobby-0.5.0/icons/HighContrastLargePrint/48x48/actions/user-list.png0000644000175000017500000000354411517044575022152 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME0+IDAThY_LSYn; HmPYC6$nf&1>1FÃ& ` .fdb?1!i0 043o_zmK{;3${99WFaa%I"~/FcHld5p$'I~GrE28g;OMMa``X,p\0KkpT_k$; yEn߾bJ~~>kjj=~[~ fFyed21c@2'[VTTh.;wА3 g^lB!ݻ݂nGEEvՊ tuu>Ou8zp\H7GH'ksaD322X__ Iϳv]o۶mQH֛ ---vMsׯrn&e9$Ilmm]+W 055%,vz$9ӧUUU% q.zحz!" )9q |g9i^^ʱigP6uaaeK/YYYIXZ-CAdlw#an4aZ̛ ~ecƍrիWF x\˃`X2o2~T6:$GGGq{^]^^޼B)7-~A=<#ȲgJa:~ rI:\~a!yMMͲ_~]ӦMWL.lt#Тz1D}}&\b@ 77###jLIeeelkkc4ê*#eW/[Y8pţGɓd~~MNiKR$*$ݿ+b0xٸ񪫫O5Q🐔Nb4e__4ߵk?~8$S(JMe} <OΝcii)sssAb>}=>Ѩ vgKRØc2:fSSmr,%{ۮ]&زeڥa9cZZb0 N sÆ ,hB$ wbnnNNZFdz49sF"an-G%mɋ/* .**RE wX,9fcm֭”Zjiy回F0m Ŕ9H [Xj!X:SN`ڵB{hh(ྏb%==]D")'0;;+M&S\l#\yqz{{SN8n0jj?sLݬQURRvV -ˈ;wĈW۷cbCC-_JH'FU ͛71rrr4X8X} b999p8Z0L00 C8|>:;;ݍ6 <͛H5%7oް8I)Q?קrYFwtR?<>465w֭[>IYFdeeaժUp:p8p&O$gW|ԛ$$I6$$4,4;ؾXXca @$I?ւIENDB`gobby-0.5.0/icons/HighContrastLargePrint/48x48/actions/Makefile.am0000644000175000017500000000023212364474462021543 00000000000000icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrint/48x48/actions icon_DATA = chat.png document-list.png user-list.png EXTRA_DIST = $(icon_DATA) gobby-0.5.0/icons/HighContrastLargePrint/48x48/actions/chat.png0000644000175000017500000000350011517044575021132 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME0!;IDAThՙ_LTǿ`֪"2R}dy)1+X 5av1ilj5F7dڇ@:(D]&cSH71;#ovͽw. L̹wΜs~F`Br3}@ :(`i Z <".h #I0 G1.H54xtH$L&Jl6p8PZZ ݾVcB<~$K}?H `dd?˷b ӉZԠ Ǟ={PVVf4UnR?Bp%>%djj,--%ZlooW?FM$cV:3gh67b452£YB$-hˡCpV---8p\.jkkQUUłʼ;KKX^^b1$ID",..ӧB䤢'ˎ;p]TWWoxOIJ$ BʣGI6ARlݺldY)LzQ ===l&!PHB\iG"MYn-..*=N cyeeE߽IR:dR驨( f l$P"/#c )%D@ b:Bb(6dRƀʢ3@=%/J[uuuJLQ $GNYBxA(?wܩWLɭlթf111QP~&׫|W'N(©TwVX?ny(B0l8|"`GG&5H*%w3 |نAz<h=j'uFVpm)GCCCCAcaap`h4OgzqBo4Iǣ(m۶+p3cF)OZ^W !xҥ5OLLe]|]]Oxxn$B:۷ǎӧz877~:opO%eUUvW}˓'OܜJuJ$@[?) e xss3GGG o$FoD $i ^nݺEͦ^\NC$[H9I>Pi_Nժ[,^|3rU e7+ QOOM&WRRA=IJL~ZSvd__yw Lܖ)ŋ900w^ P[s333x4knz2X&9{ll6~='5 6`Je\.Glv7:j544UTj7oK'd$pb7?/dmmmy\vM BbrU:zzz$Ud2++<ܹsj ]7f__>*$_"#Ɉѿ$E$w?a&IENDB`gobby-0.5.0/icons/HighContrastLargePrint/48x48/actions/document-list.png0000644000175000017500000000205611517044575023007 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME07 6IDAThOH+Wƿ hb"Zq.nJWnZqS()HAy RZ"ծH N( ֍P5I8/1 LΜ;sfD@E$ JB5UfH4!9%7fCVV,?(px\ڊ\L=~!"ݎnJH_*.//u >}V !l/ @'AR$oR(nG4}dZ'Ieb{{χLW?H~ өY|4sss7IV @ B\ߓ4 @ jrcc#WPf.Px\s:BΊ.XXX@]]]}}}Y) Ɋ3!īF?22RHLLL(ݾΌTleYiYA9n+++Y-[SYӰX,%vU[V{ZRTlFss3fwRzzQi(i b1B!? ,--)xeߟ7QSSeL$ɂx. ncvv>I "_cc#l6r)Ds(q 6D"444@8<<,S(JJ{f,&LMM_CCCEgKMN&1l6ݛsx0R#K&6,Ԭ9_W,FvUrkgoK_x:M efjKWOZq^d1*H~\gHIENDB`gobby-0.5.0/icons/HighContrastLargePrint/48x48/Makefile.am0000644000175000017500000000002711517044575020102 00000000000000SUBDIRS = apps actions gobby-0.5.0/icons/HighContrastLargePrint/scalable/0000755000175000017500000000000012376162133017071 500000000000000gobby-0.5.0/icons/HighContrastLargePrint/scalable/Makefile.in0000644000175000017500000004431412376162112021061 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/HighContrastLargePrint/scalable DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ SUBDIRS = apps actions all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/HighContrastLargePrint/scalable/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrint/scalable/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done 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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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: ctags-recursive $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive 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: gobby-0.5.0/icons/HighContrastLargePrint/scalable/apps/0000755000175000017500000000000012376162133020034 500000000000000gobby-0.5.0/icons/HighContrastLargePrint/scalable/apps/Makefile.in0000644000175000017500000003267612376162113022035 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/HighContrastLargePrint/scalable/apps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ icondir = $(datadir)/icons/HighContrastLargePrint/scalable/apps icon_DATA = gobby-0.5.svg EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/HighContrastLargePrint/scalable/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrint/scalable/apps/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-iconDATA 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-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA # 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: gobby-0.5.0/icons/HighContrastLargePrint/scalable/apps/Makefile.am0000644000175000017500000000016512364474462022022 00000000000000icondir = $(datadir)/icons/HighContrastLargePrint/scalable/apps icon_DATA = gobby-0.5.svg EXTRA_DIST = $(icon_DATA) gobby-0.5.0/icons/HighContrastLargePrint/scalable/apps/gobby-0.5.svg0000644000175000017500000006050112364474462022111 00000000000000 image/svg+xml gobby-0.5.0/icons/HighContrastLargePrint/scalable/actions/0000755000175000017500000000000012376162133020531 500000000000000gobby-0.5.0/icons/HighContrastLargePrint/scalable/actions/Makefile.in0000644000175000017500000003275712376162112022531 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/HighContrastLargePrint/scalable/actions DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrint/scalable/actions icon_DATA = chat.svg document-list.svg user-list.svg EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/HighContrastLargePrint/scalable/actions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrint/scalable/actions/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-iconDATA 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-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA # 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: gobby-0.5.0/icons/HighContrastLargePrint/scalable/actions/user-list.svg0000644000175000017500000001576111517044575023140 00000000000000 image/svg+xml gobby-0.5.0/icons/HighContrastLargePrint/scalable/actions/chat.svg0000644000175000017500000001040611517044575022117 00000000000000 image/svg+xml gobby-0.5.0/icons/HighContrastLargePrint/scalable/actions/document-list.svg0000644000175000017500000000760111517044575023772 00000000000000 image/svg+xml gobby-0.5.0/icons/HighContrastLargePrint/scalable/actions/Makefile.am0000644000175000017500000000023512364474462022515 00000000000000icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrint/scalable/actions icon_DATA = chat.svg document-list.svg user-list.svg EXTRA_DIST = $(icon_DATA) gobby-0.5.0/icons/HighContrastLargePrint/scalable/Makefile.am0000644000175000017500000000002711517044575021051 00000000000000SUBDIRS = apps actions gobby-0.5.0/icons/HighContrastLargePrint/Makefile.am0000644000175000017500000000067611517044575017315 00000000000000SUBDIRS = 48x48 scalable gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/HighContrastLargePrint install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi gobby-0.5.0/icons/Makefile.am0000644000175000017500000000010711517044575012715 00000000000000SUBDIRS = hicolor HighContrastLargePrint HighContrastLargePrintInverse gobby-0.5.0/icons/HighContrastLargePrintInverse/0000755000175000017500000000000012376162134016660 500000000000000gobby-0.5.0/icons/HighContrastLargePrintInverse/Makefile.in0000644000175000017500000004544612376162113020657 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/HighContrastLargePrintInverse DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ SUBDIRS = 48x48 scalable gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/HighContrastLargePrintInverse all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/HighContrastLargePrintInverse/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done 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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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: ctags-recursive $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-data-am install-strip tags-recursive \ uninstall-am .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-hook \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ uninstall-hook install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi # 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: gobby-0.5.0/icons/HighContrastLargePrintInverse/48x48/0000755000175000017500000000000012376162133017456 500000000000000gobby-0.5.0/icons/HighContrastLargePrintInverse/48x48/Makefile.in0000644000175000017500000004433012376162113021445 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/HighContrastLargePrintInverse/48x48 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ SUBDIRS = apps actions all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/HighContrastLargePrintInverse/48x48/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/48x48/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done 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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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: ctags-recursive $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive 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: gobby-0.5.0/icons/HighContrastLargePrintInverse/48x48/apps/0000755000175000017500000000000012376162133020421 500000000000000gobby-0.5.0/icons/HighContrastLargePrintInverse/48x48/apps/gobby-0.5.png0000644000175000017500000000455412364474462022471 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME'8IDATh޽mLW ˼$@x[5m)FDVƴԒ~`m5Mܘlڢͺ[ݕZְ!a#Hk@еPgv &p39i}@l9 yMp$o* BhH j ͕KIIэ74[illTJJhOt z-KeFh&R"l"?Ρ!n'lX,2228<7ofxx`9w`=FwVa,))-**3穨Phho**[& ;0ןxqXXhѢ޾}{Pq@ ) 9ikkۧp ˗`<kY;QNii)9 % ;::ϧ JKK ,Y{bX&u G+**ĉX,|>TVVõ@nv(KKK%IGRRREGGP;wpкuL\reZٳ=122bcXm&@+V$y^mٲ%&I裏Ç PMMʹ8q":Nf\}9w۶mȑ#~ժU100`hhݻwsiV+wS#&JKKzhtb\.caj'Izg&p풤<zJ&e\"**h:;;'͛7Xt)82Jpf*p80I#d/_NQQQ,$ӧOT02S__/Ia(>>^^~ejjjzB| >Ɂ!!`jkk{.wd3 !իW|$%%q% hjj2?|駼+fp-زe ;v8sLC8uuuIY}>TVV*ӭ>OCCC&EFFh9i(//$(77WǏ7-uuuzvZnI<BvXfjkkK/dr(^x.]ʒ%Kxꩧx'X,rMz… yąKWWǎN%.\ I:sCHMMUKK˄Ybh```G7xc!T (66V^W9F\.I۷~hzuus>-X`Af";wrU[oNYYj6lkظq#w{Myy97ߐ̮]B=.\2J1%I<ŋ'l6Mnݒ$9rd^Ѐq11\.9+W7.dNZZ/O? ?0dW2w[[[KCCYYY԰o>*++x<W… 3.]DLL/x2/tPoosSkk$jx=z蘂fZvc722A(11Q%%%ϧ OMMU$g̠^W[Mh"6l@ff&$$$֭[|>cTUUl2^/Vʕ+nLexxf|>'MJvϞ=c,x_hzuI t*---nnnҁ/ɓf/_}V\NIRCCYԆUUUl޼fVX&))m۶MXX ={v#<3()|\(++ hv!IRGGŒ n@%%%i;&&Ƥ6m2/·6$رcF1_J;fwxXVp:x'9&yӕA2')h駟kMzje ><USi` z.Tr8דj[p:\.vbcc`p)c̛Os.6qGt)y/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/HighContrastLargePrintInverse/48x48/apps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ icondir = $(datadir)/icons/HighContrastLargePrintInverse/48x48/apps icon_DATA = gobby-0.5.png EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/HighContrastLargePrintInverse/48x48/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/48x48/apps/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-iconDATA 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-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA # 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: gobby-0.5.0/icons/HighContrastLargePrintInverse/48x48/apps/Makefile.am0000644000175000017500000000017112364474462022404 00000000000000icondir = $(datadir)/icons/HighContrastLargePrintInverse/48x48/apps icon_DATA = gobby-0.5.png EXTRA_DIST = $(icon_DATA) gobby-0.5.0/icons/HighContrastLargePrintInverse/48x48/actions/0000755000175000017500000000000012376162134021117 500000000000000gobby-0.5.0/icons/HighContrastLargePrintInverse/48x48/actions/Makefile.in0000644000175000017500000003277712376162113023121 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/HighContrastLargePrintInverse/48x48/actions DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrintInverse/48x48/actions icon_DATA = chat.png document-list.png user-list.png EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/HighContrastLargePrintInverse/48x48/actions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/48x48/actions/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-iconDATA 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-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA # 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: gobby-0.5.0/icons/HighContrastLargePrintInverse/48x48/actions/user-list.png0000644000175000017500000000351611517044575023505 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME'mIDAThZmLSW~nU>)5l1 ?fقH$ j/ _FdÌ%N2-,ԥS*ut,Jt% w?ޜ{[ල$ܞs9{AY1.[%`(G/V`Ps.-Kм 9_ \NNڵO&t:jD6N[<ϧ/Roo/%AlTRR8w_xtsGϟp8LrիWJFJbq ͥwR*2 R2݈rc? BluBWW\.BZ-, ?Q<~|)=577'ZT*544P {)mܸ7< 4`jjjD 0:>KKKibbB4E~a x<8T]]7jh;$rLb^{{{*1jmm驫٣Xŗ.]޹sgJZ- znݺ%ӨӬG FR+txB59T2ƶmۄDZ33>>.ԋшܢb؆V333ibC:)L`0(7oN+**HPhEgB}PT)رcP+Moln B9r$eB{UH&zD"v)###ۢ㸪wnq͖SN{^RTlhФtK<ϋ܉fYhqqQD`dd };4\t8 }|Nq\pD"<{,t<c3YRnѣ|p\χlFYYٚ3ׇ}aaa!h@)|HKKK=x nI%H^Pߍ7onOLQyyyЛ7oq{n?~8s<;vLJ< jҕ+Wp͑磞~:rbB!AԺ>ё*]}vv6  !k8Q 9JXu'sq*|քy2?/ 23ם Dm/a[l=qL&ӺX,Byx^8n;wT455l9NiOc݈'N9[gΜISjkksI}c222vyNֺZdeeɓ'qGGG d=b{N%%% ~?BD_ʠuuuQccJ{i,7K\^^d``@^^rss/6`ff]5@ 0?ϒAMJ*QXAs|mJRQ]Y)-_z9_{M{3IENDB`gobby-0.5.0/icons/HighContrastLargePrintInverse/48x48/actions/Makefile.am0000644000175000017500000000024112364474462023077 00000000000000icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrintInverse/48x48/actions icon_DATA = chat.png document-list.png user-list.png EXTRA_DIST = $(icon_DATA) gobby-0.5.0/icons/HighContrastLargePrintInverse/48x48/actions/chat.png0000644000175000017500000000343111517044575022471 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME&3OIDATh՚_LT?3Έ3 0]۔vp4+hV҈ щ@LԤuLվb oM(!6RLKBBI[P*j{B2o2!߹;  pyxTƀ? !3  fWJg-*"]JO[zj^/6 Ś5kx<̌v昞^n'.._7n7{% RZZJII EEE׫M&LLLDcpp^>nXuuz/555 BI'Xqs`rzb2q%P䧁#@P6 ٱca4Gx<˩S>R+-jǏGFF4fI&Zܜ:t >DANW\ FA3߀ ËgJCCaFg3|2|-2dƍ c~jjJvmd8 sŴm^U,j3|_VLj,#5Άh TSShU[[ked0:zSݿ"[. ~~~^9bY6.pi;vLR6] mrبf=|$۲wvpp>4D*H,%8#\?Ӽs;Lr:WsIENDB`gobby-0.5.0/icons/HighContrastLargePrintInverse/48x48/actions/document-list.png0000644000175000017500000000203011517044575024333 00000000000000PNG  IHDR00WsRGB pHYs B(xtIME'!m IDAThKH+gGJH(xcB*ޅtU J馈hႠT\M v!^Eh݈tQ(Hu!DƠy1ҤIkq>.*///<NS鷚.ؐHsssQuPkkk~Ƚ>ۇEqvcjSb!"p\#fDfUX^K{n=@AKjp8hiiQψ68^^*666;$0::Z9Kɔߧ$˶N'+++444d;??'V@ P<ѧ hy\BE8nlv788(|>\/www+g?^<'`osYvV g;oQ.!sYTIENDB`gobby-0.5.0/icons/HighContrastLargePrintInverse/48x48/Makefile.am0000644000175000017500000000002711517044575021436 00000000000000SUBDIRS = apps actions gobby-0.5.0/icons/HighContrastLargePrintInverse/scalable/0000755000175000017500000000000012376162134020426 500000000000000gobby-0.5.0/icons/HighContrastLargePrintInverse/scalable/Makefile.in0000644000175000017500000004434112376162113022416 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/HighContrastLargePrintInverse/scalable DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ SUBDIRS = apps actions all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/HighContrastLargePrintInverse/scalable/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/scalable/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done 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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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: ctags-recursive $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive 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: gobby-0.5.0/icons/HighContrastLargePrintInverse/scalable/apps/0000755000175000017500000000000012376162134021371 500000000000000gobby-0.5.0/icons/HighContrastLargePrintInverse/scalable/apps/Makefile.in0000644000175000017500000003273212376162114023363 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/HighContrastLargePrintInverse/scalable/apps DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ icondir = $(datadir)/icons/HighContrastLargePrintInverse/scalable/apps icon_DATA = gobby-0.5.svg EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/HighContrastLargePrintInverse/scalable/apps/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/scalable/apps/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-iconDATA 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-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA # 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: gobby-0.5.0/icons/HighContrastLargePrintInverse/scalable/apps/Makefile.am0000644000175000017500000000017412364474462023356 00000000000000icondir = $(datadir)/icons/HighContrastLargePrintInverse/scalable/apps icon_DATA = gobby-0.5.svg EXTRA_DIST = $(icon_DATA) gobby-0.5.0/icons/HighContrastLargePrintInverse/scalable/apps/gobby-0.5.svg0000644000175000017500000006165112364474462023454 00000000000000 image/svg+xml gobby-0.5.0/icons/HighContrastLargePrintInverse/scalable/actions/0000755000175000017500000000000012376162134022066 500000000000000gobby-0.5.0/icons/HighContrastLargePrintInverse/scalable/actions/Makefile.in0000644000175000017500000003301312376162113024050 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = icons/HighContrastLargePrintInverse/scalable/actions DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(icondir)" DATA = $(icon_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrintInverse/scalable/actions icon_DATA = chat.svg document-list.svg user-list.svg EXTRA_DIST = $(icon_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign icons/HighContrastLargePrintInverse/scalable/actions/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign icons/HighContrastLargePrintInverse/scalable/actions/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(icondir)'"; \ $(MKDIR_P) "$(DESTDIR)$(icondir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(icondir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(DATA) installdirs: for dir in "$(DESTDIR)$(icondir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-iconDATA 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-iconDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-iconDATA 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-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-iconDATA # 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: gobby-0.5.0/icons/HighContrastLargePrintInverse/scalable/actions/user-list.svg0000644000175000017500000001575411517044575024476 00000000000000 image/svg+xml gobby-0.5.0/icons/HighContrastLargePrintInverse/scalable/actions/chat.svg0000644000175000017500000001047311517044575023457 00000000000000 image/svg+xml gobby-0.5.0/icons/HighContrastLargePrintInverse/scalable/actions/document-list.svg0000644000175000017500000000757411517044575025337 00000000000000 image/svg+xml gobby-0.5.0/icons/HighContrastLargePrintInverse/scalable/actions/Makefile.am0000644000175000017500000000024412364474462024051 00000000000000icondir = $(datadir)/gobby-0.5/icons/HighContrastLargePrintInverse/scalable/actions icon_DATA = chat.svg document-list.svg user-list.svg EXTRA_DIST = $(icon_DATA) gobby-0.5.0/icons/HighContrastLargePrintInverse/scalable/Makefile.am0000644000175000017500000000002711517044575022405 00000000000000SUBDIRS = apps actions gobby-0.5.0/icons/HighContrastLargePrintInverse/Makefile.am0000644000175000017500000000070511517044575020642 00000000000000SUBDIRS = 48x48 scalable gtk_update_icon_cache = gtk-update-icon-cache -f -t $(datadir)/icons/HighContrastLargePrintInverse install-data-hook: update-icon-cache uninstall-hook: update-icon-cache update-icon-cache: @-if test -z "$(DESTDIR)"; then \ echo "Updating Gtk icon cache."; \ $(gtk_update_icon_cache); \ else \ echo "*** Icon cache not updated. After (un)install, run this:"; \ echo "*** $(gtk_update_icon_cache)"; \ fi gobby-0.5.0/AUTHORS0000644000175000017500000000234712370427447010627 00000000000000gobby ===== Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. Copyright (c) 2008-2014, Armin Burgmeier Authors: * Armin Burgmeier * Philipp Kern Contributors: * Benjamin Herr * Ben Levitt * Gabríel A. Pétursson Translations: French: * Peer Janssen * Mohammed Adnene Trojette Spanish: * Mario Palomo Swedish: * Daniel Nylander German: * Philipp Kern gobby-0.5.0/Makefile.in0000644000175000017500000011067112376162115011616 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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@ @HAVE_GNOME_DOC_UTILS_TRUE@am__append_1 = help bin_PROGRAMS = gobby-0.5$(EXEEXT) @WIN32_TRUE@am__append_2 = -lws2_32 subdir = . DIST_COMMON = $(am__configure_deps) $(dist_man_MANS) \ $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ TODO compile config.guess config.sub depcomp install-sh \ missing mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(desktopdir)" PROGRAMS = $(bin_PROGRAMS) am_gobby_0_5_OBJECTS = gobby_0_5_OBJECTS = $(am_gobby_0_5_OBJECTS) am__DEPENDENCIES_1 = gobby_0_5_DEPENDENCIES = code/libgobby.a \ code/commands/libgobby-commands.a \ code/commands/file-tasks/libgobby-file-tasks.a \ code/operations/libgobby-operations.a \ code/dialogs/libgobby-dialogs.a code/core/libgobby-core.a \ code/util/libgobby-util.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) gobby_0_5_LINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) \ $(gobby_0_5_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/code depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(gobby_0_5_SOURCES) $(nodist_EXTRA_gobby_0_5_SOURCES) DIST_SOURCES = $(gobby_0_5_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(dist_man_MANS) DATA = $(appdata_DATA) $(desktop_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = m4 win32 code . icons po help DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ SUBDIRS = m4 win32 code . icons po $(am__append_1) # Tell aclocal where to find `.m4' files. ACLOCAL_AMFLAGS = -I m4 dist_man_MANS = gobby-0.5.1 gobby_0_5_LDADD = code/libgobby.a code/commands/libgobby-commands.a \ code/commands/file-tasks/libgobby-file-tasks.a \ code/operations/libgobby-operations.a \ code/dialogs/libgobby-dialogs.a code/core/libgobby-core.a \ code/util/libgobby-util.a $(gobby_LIBS) $(unique_LIBS) \ $(infinote_LIBS) $(LIBS) $(am__append_2) @WIN32_TRUE@gobby_0_5_LDFLAGS = \ @WIN32_TRUE@ -Wl,--enable-runtime-pseudo-reloc \ @WIN32_TRUE@ -mwindows \ @WIN32_TRUE@ win32/gobby.res gobby_0_5_SOURCES = # .desktop file @WIN32_FALSE@desktopdir = $(datadir)/applications @WIN32_FALSE@desktop_in_files = gobby-0.5.desktop.in @WIN32_FALSE@desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) @WIN32_FALSE@appdatadir = $(datadir)/appdata @WIN32_FALSE@appdata_DATA = gobby-0.5.appdata.xml # Dummy C++ source to cause C++ linking, otherwise some platforms don't link # correctly against libstdc++. See also #399. Note that this file does not # (need to) exist in the source tree. nodist_EXTRA_gobby_0_5_SOURCES = dummy.cpp # Debian seems to need an XPM of the program icon, so we provide one here. # It's currently not used for anything else, though. # For the manual EXTRA_DIST = gobby-0.5.xpm gnome-doc-utils.make gobby-0.5.desktop.in \ gobby-0.5.appdata.xml DISTCLEANFILES = gnome-doc-utils.make MAINTAINERCLEANFILES = \ ChangeLog all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) gobby-0.5$(EXEEXT): $(gobby_0_5_OBJECTS) $(gobby_0_5_DEPENDENCIES) $(EXTRA_gobby_0_5_DEPENDENCIES) @rm -f gobby-0.5$(EXEEXT) $(AM_V_CXXLD)$(gobby_0_5_LINK) $(gobby_0_5_OBJECTS) $(gobby_0_5_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dummy.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-appdataDATA: $(appdata_DATA) @$(NORMAL_INSTALL) @list='$(appdata_DATA)'; test -n "$(appdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(appdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(appdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(appdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(appdatadir)" || exit $$?; \ done uninstall-appdataDATA: @$(NORMAL_UNINSTALL) @list='$(appdata_DATA)'; test -n "$(appdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(appdatadir)'; $(am__uninstall_files_from_dir) install-desktopDATA: $(desktop_DATA) @$(NORMAL_INSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(desktopdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(desktopdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(desktopdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(desktopdir)" || exit $$?; \ done uninstall-desktopDATA: @$(NORMAL_UNINSTALL) @list='$(desktop_DATA)'; test -n "$(desktopdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(desktopdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done 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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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: ctags-recursive $(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) @case `sed 15q $(srcdir)/NEWS` in \ *"$(VERSION)"*) : ;; \ *) \ echo "NEWS not updated; not releasing" 1>&2; \ exit 1;; \ esac @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod u+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) $(MANS) $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(appdatadir)" "$(DESTDIR)$(desktopdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-local mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-appdataDATA install-desktopDATA install-man install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-man1 install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-appdataDATA uninstall-binPROGRAMS \ uninstall-desktopDATA uninstall-man uninstall-man: uninstall-man1 .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-binPROGRAMS \ clean-generic clean-local ctags ctags-recursive dist dist-all \ dist-bzip2 dist-gzip dist-lzip dist-lzma dist-shar dist-tarZ \ dist-xz dist-zip distcheck distclean distclean-compile \ distclean-generic distclean-local distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-appdataDATA \ install-binPROGRAMS install-data install-data-am \ install-desktopDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man1 install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am \ uninstall-appdataDATA uninstall-binPROGRAMS \ uninstall-desktopDATA uninstall-man uninstall-man1 clean-local: -rm -rf gobby-0.5.desktop @INTLTOOL_DESKTOP_RULE@ distclean-local: if test "$(srcdir)" = "."; then :; else \ rm -f ChangeLog; \ fi ChangeLog: $(AM_V_GEN) if test -d "$(srcdir)/.git"; then \ (GIT_DIR=$(top_srcdir)/.git ./missing --run git log \ 6570cc49a6c2c29fe9cf4c85e3b74f133ae4c1f8..HEAD --stat=78) \ | fmt --split-only --width=78 > $@.tmp \ && cat $@.tmp ChangeLog.manual ChangeLog.pre-0.5 > $@ && $(RM) $@.tmp \ || ($(RM) $@.tmp; \ echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ (test -f $@ || echo git-log is required to generate this file >> $@)); \ else \ test -f $@ || \ (echo A git checkout and git-log is required to generate ChangeLog >&2 && \ echo A git checkout and git-log is required to generate this file >> $@); \ fi .PHONY: ChangeLog # 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: gobby-0.5.0/compile0000755000175000017500000001615212067604151011124 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-03-05.13; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2009, 2010, 2012 Free # Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gobby-0.5.0/configure0000755000175000017500000101677312376162116011472 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for gobby 0.5.0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and crew@0x539.de $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='gobby' PACKAGE_TARNAME='gobby' PACKAGE_VERSION='0.5.0' PACKAGE_STRING='gobby 0.5.0' PACKAGE_BUGREPORT='crew@0x539.de' PACKAGE_URL='' ac_unique_file="code/window.hpp" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS HAVE_GNOME_DOC_UTILS_FALSE HAVE_GNOME_DOC_UTILS_TRUE DISTCHECK_CONFIGURE_FLAGS ENABLE_SK_FALSE ENABLE_SK_TRUE DOC_USER_FORMATS OMF_DIR HELP_DIR GETTEXT_PACKAGE ALL_LINGUAS INTLTOOL_PERL MSGMERGE INTLTOOL_POLICY_RULE INTLTOOL_SERVICE_RULE INTLTOOL_THEME_RULE INTLTOOL_SCHEMAS_RULE INTLTOOL_CAVES_RULE INTLTOOL_XML_NOMERGE_RULE INTLTOOL_XML_RULE INTLTOOL_KBD_RULE INTLTOOL_XAM_RULE INTLTOOL_UI_RULE INTLTOOL_SOUNDLIST_RULE INTLTOOL_SHEET_RULE INTLTOOL_SERVER_RULE INTLTOOL_PONG_RULE INTLTOOL_OAF_RULE INTLTOOL_PROP_RULE INTLTOOL_KEYS_RULE INTLTOOL_DIRECTORY_RULE INTLTOOL_DESKTOP_RULE intltool__v_merge_options_0 intltool__v_merge_options_ INTLTOOL_V_MERGE_OPTIONS INTLTOOL__v_MERGE_0 INTLTOOL__v_MERGE_ INTLTOOL_V_MERGE INTLTOOL_EXTRACT INTLTOOL_MERGE INTLTOOL_UPDATE MKINSTALLDIRS POSUB POFILES PO_IN_DATADIR_FALSE PO_IN_DATADIR_TRUE INTLLIBS INSTOBJEXT GMOFILES DATADIRNAME CATOBJEXT CATALOGS XGETTEXT GMSGFMT MSGFMT_OPTS MSGFMT USE_NLS EGREP GREP WITH_UNIQUE_FALSE WITH_UNIQUE_TRUE unique_LIBS unique_CFLAGS infinote_LIBS infinote_CFLAGS gobby_LIBS gobby_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG WIN32_FALSE WIN32_TRUE WINDRES RANLIB LN_S CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE ac_ct_CC CFLAGS CC am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX host_os host_vendor host_cpu host build_os build_vendor build_cpu build AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_gtk3 with_unique enable_nls with_help_dir with_omf_dir with_help_formats enable_scrollkeeper ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS CPP PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR gobby_CFLAGS gobby_LIBS infinote_CFLAGS infinote_LIBS unique_CFLAGS unique_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures gobby 0.5.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/gobby] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of gobby 0.5.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-nls do not use Native Language Support --disable-scrollkeeper do not make updates to the scrollkeeper database Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-gtk3 Builds gobby against GTK+ 3 instead of GTK+ 2[[default=no]] --with-unique Enables support for single-instance [[default=auto]] --with-help-dir=DIR path to help docs --with-omf-dir=DIR path to OMF files --with-help-formats=FORMATS list of formats Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path gobby_CFLAGS C compiler flags for gobby, overriding pkg-config gobby_LIBS linker flags for gobby, overriding pkg-config infinote_CFLAGS C compiler flags for infinote, overriding pkg-config infinote_LIBS linker flags for infinote, overriding pkg-config unique_CFLAGS C compiler flags for unique, overriding pkg-config unique_LIBS linker flags for unique, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF gobby configure 0.5.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ---------------------------- ## ## Report this to crew@0x539.de ## ## ---------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by gobby $as_me 0.5.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.11' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='gobby' VERSION='0.5.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' ac_config_headers="$ac_config_headers code/features.hpp" # Extract host information. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Checks for programs. ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 $as_echo_n "checking whether the C++ compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 $as_echo_n "checking for C++ compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi if test "x$CC" != xcc; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5 $as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5 $as_echo_n "checking whether cc understands -c and -o together... " >&6; } fi set dummy $CC; ac_cc=`$as_echo "$2" | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` if eval \${ac_cv_prog_cc_${ac_cc}_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # We do the test twice because some compilers refuse to overwrite an # existing .o file with -o, though they will create one. ac_try='$CC -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then eval ac_cv_prog_cc_${ac_cc}_c_o=yes if test "x$CC" != xcc; then # Test first that cc exists at all. if { ac_try='cc -c conftest.$ac_ext >&5' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5' rm -f conftest2.* if { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -f conftest2.$ac_objext && { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # cc works too. : else # cc exists but doesn't like -o. eval ac_cv_prog_cc_${ac_cc}_c_o=no fi fi fi else eval ac_cv_prog_cc_${ac_cc}_c_o=no fi rm -f core conftest* fi if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h fi # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $2 | sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache ################################### # Check for Win32 ################################### { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable WIN32 specific flags" >&5 $as_echo_n "checking whether to enable WIN32 specific flags... " >&6; } case "$host_os" in *mingw*) win32=true { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 $as_echo "$WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 $as_echo "$ac_ct_WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi ;; *) win32=false { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac if test x$win32 = xtrue; then WIN32_TRUE= WIN32_FALSE='#' else WIN32_TRUE='#' WIN32_FALSE= fi ################################### # Check for GTK+ 3 ################################### # Check whether --with-gtk3 was given. if test "${with_gtk3+set}" = set; then : withval=$with_gtk3; with_gtk3=$withval else with_gtk3=no fi if test "x$with_gtk3" = "xyes"; then # TODO: Increase to 2.99.2 once it's out gtk_requirement="gtkmm-3.0 >= 2.99.1 gtksourceview-3.0 >= 2.91.0" gtk_version=3 infgtkver=gtk3 else gtk_requirement="gtkmm-2.4 >= 2.12.0 gtksourceview-2.0 >= 2.4" gtk_version=2 infgtkver=gtk fi required_libs="libxml++-2.6 glibmm-2.4 >= 2.18.0 giomm-2.4 >= 2.18.0 gthread-2.0 libgsasl >= 0.2.21 $gtk_requirement" ################################### # Check for Mac OS X ################################### # Check if we are running on OS X, for special link handling. if test "x$build_vendor" = "xapple" ; then $as_echo "#define PLATFORM_OSX 1" >>confdefs.h # Check whether we are running the native quartz backend if test "$gtk_version" == "2"; then target=`pkg-config --variable=target gtk+-2.0` else target=`pkg-config --variable=targets gtk+-3.0` fi # If so use ige-mac-integration if test "$target" = "quartz" ; then $as_echo "#define PLATFORM_OSX_NATIVE 1" >>confdefs.h required_libs="$required_libs ige-mac-integration" fi fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache ################################### # Check for libraries. ################################### if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gobby" >&5 $as_echo_n "checking for gobby... " >&6; } if test -n "$gobby_CFLAGS"; then pkg_cv_gobby_CFLAGS="$gobby_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$required_libs\""; } >&5 ($PKG_CONFIG --exists --print-errors "$required_libs") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_gobby_CFLAGS=`$PKG_CONFIG --cflags "$required_libs" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$gobby_LIBS"; then pkg_cv_gobby_LIBS="$gobby_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$required_libs\""; } >&5 ($PKG_CONFIG --exists --print-errors "$required_libs") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_gobby_LIBS=`$PKG_CONFIG --libs "$required_libs" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then gobby_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$required_libs" 2>&1` else gobby_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$required_libs" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$gobby_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($required_libs) were not met: $gobby_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables gobby_CFLAGS and gobby_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables gobby_CFLAGS and gobby_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else gobby_CFLAGS=$pkg_cv_gobby_CFLAGS gobby_LIBS=$pkg_cv_gobby_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for infinote" >&5 $as_echo_n "checking for infinote... " >&6; } if test -n "$infinote_CFLAGS"; then pkg_cv_infinote_CFLAGS="$infinote_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libinfinity-0.6 libinftext-0.6 libinf\${infgtkver}-0.6 libinftext\${infgtkver}-0.6\""; } >&5 ($PKG_CONFIG --exists --print-errors "libinfinity-0.6 libinftext-0.6 libinf${infgtkver}-0.6 libinftext${infgtkver}-0.6") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_infinote_CFLAGS=`$PKG_CONFIG --cflags "libinfinity-0.6 libinftext-0.6 libinf${infgtkver}-0.6 libinftext${infgtkver}-0.6" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$infinote_LIBS"; then pkg_cv_infinote_LIBS="$infinote_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libinfinity-0.6 libinftext-0.6 libinf\${infgtkver}-0.6 libinftext\${infgtkver}-0.6\""; } >&5 ($PKG_CONFIG --exists --print-errors "libinfinity-0.6 libinftext-0.6 libinf${infgtkver}-0.6 libinftext${infgtkver}-0.6") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_infinote_LIBS=`$PKG_CONFIG --libs "libinfinity-0.6 libinftext-0.6 libinf${infgtkver}-0.6 libinftext${infgtkver}-0.6" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then infinote_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libinfinity-0.6 libinftext-0.6 libinf${infgtkver}-0.6 libinftext${infgtkver}-0.6" 2>&1` else infinote_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libinfinity-0.6 libinftext-0.6 libinf${infgtkver}-0.6 libinftext${infgtkver}-0.6" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$infinote_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libinfinity-0.6 libinftext-0.6 libinf${infgtkver}-0.6 libinftext${infgtkver}-0.6) were not met: $infinote_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables infinote_CFLAGS and infinote_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables infinote_CFLAGS and infinote_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else infinote_CFLAGS=$pkg_cv_infinote_CFLAGS infinote_LIBS=$pkg_cv_infinote_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache ################################### # Check for unique (optional) ################################### # Check whether --with-unique was given. if test "${with_unique+set}" = set; then : withval=$with_unique; use_unique=$withval else use_unique=auto fi if test "$with_gtk3" != "yes"; then unique_req="unique-1.0 >= 1.1.2" else unique_req="unique-3.0" fi if test "x$use_unique" = "xauto"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unique" >&5 $as_echo_n "checking for unique... " >&6; } if test -n "$unique_CFLAGS"; then pkg_cv_unique_CFLAGS="$unique_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$unique_req\""; } >&5 ($PKG_CONFIG --exists --print-errors "$unique_req") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_unique_CFLAGS=`$PKG_CONFIG --cflags "$unique_req" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$unique_LIBS"; then pkg_cv_unique_LIBS="$unique_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$unique_req\""; } >&5 ($PKG_CONFIG --exists --print-errors "$unique_req") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_unique_LIBS=`$PKG_CONFIG --libs "$unique_req" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then unique_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$unique_req" 2>&1` else unique_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$unique_req" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$unique_PKG_ERRORS" >&5 use_unique=no elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } use_unique=no else unique_CFLAGS=$pkg_cv_unique_CFLAGS unique_LIBS=$pkg_cv_unique_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } use_unique=yes fi elif test "x$use_unique" = "xyes"; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unique" >&5 $as_echo_n "checking for unique... " >&6; } if test -n "$unique_CFLAGS"; then pkg_cv_unique_CFLAGS="$unique_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$unique_req\""; } >&5 ($PKG_CONFIG --exists --print-errors "$unique_req") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_unique_CFLAGS=`$PKG_CONFIG --cflags "$unique_req" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$unique_LIBS"; then pkg_cv_unique_LIBS="$unique_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"\$unique_req\""; } >&5 ($PKG_CONFIG --exists --print-errors "$unique_req") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_unique_LIBS=`$PKG_CONFIG --libs "$unique_req" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then unique_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$unique_req" 2>&1` else unique_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$unique_req" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$unique_PKG_ERRORS" >&5 as_fn_error $? "Package requirements ($unique_req) were not met: $unique_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables unique_CFLAGS and unique_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables unique_CFLAGS and unique_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else unique_CFLAGS=$pkg_cv_unique_CFLAGS unique_LIBS=$pkg_cv_unique_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi fi if test "x$use_unique" = "xyes"; then $as_echo "#define WITH_UNIQUE 1" >>confdefs.h fi if test "x$use_unique" = "xyes"; then WITH_UNIQUE_TRUE= WITH_UNIQUE_FALSE='#' else WITH_UNIQUE_TRUE='#' WITH_UNIQUE_FALSE= fi cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache ################################### # Glib i18n/gettext support. ################################### ALL_LINGUAS="`grep -v '^#' "$srcdir/po/LINGUAS" | tr '\n' ' '`" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in locale.h do : ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" if test "x$ac_cv_header_locale_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_H 1 _ACEOF fi done if test $ac_cv_header_locale_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${am_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_val_LC_MESSAGES=yes else am_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 $as_echo "$am_cv_val_LC_MESSAGES" >&6; } if test $am_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi fi USE_NLS=yes gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes; then : gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 $as_echo_n "checking for ngettext in libc... " >&6; } if ${gt_cv_func_ngettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !ngettext ("","", 1) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_ngettext_libc=yes else gt_cv_func_ngettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 $as_echo "$gt_cv_func_ngettext_libc" >&6; } if test "$gt_cv_func_ngettext_libc" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 $as_echo_n "checking for dgettext in libc... " >&6; } if ${gt_cv_func_dgettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return !dgettext ("","") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_dgettext_libc=yes else gt_cv_func_dgettext_libc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 $as_echo "$gt_cv_func_dgettext_libc" >&6; } fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } if ${ac_cv_lib_intl_bindtextdomain+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char bindtextdomain (); int main () { return bindtextdomain (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_bindtextdomain=yes else ac_cv_lib_intl_bindtextdomain=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 $as_echo_n "checking for dgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dgettext (); int main () { return dgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dgettext=yes else ac_cv_lib_intl_dgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 $as_echo "$ac_cv_lib_intl_dgettext" >&6; } if test "x$ac_cv_lib_intl_dgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes fi fi fi if test "$gt_cv_func_dgettext_libintl" != "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 $as_echo "" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 $as_echo_n "checking for ngettext in -lintl... " >&6; } if ${ac_cv_lib_intl_ngettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ngettext (); int main () { return ngettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_ngettext=yes else ac_cv_lib_intl_ngettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 $as_echo "$ac_cv_lib_intl_ngettext" >&6; } if test "x$ac_cv_lib_intl_ngettext" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 $as_echo_n "checking for dcgettext in -lintl... " >&6; } if ${ac_cv_lib_intl_dcgettext+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lintl -liconv $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dcgettext (); int main () { return dcgettext (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_intl_dcgettext=yes else ac_cv_lib_intl_dcgettext=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv else : fi else : fi fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset for ac_func in bind_textdomain_codeset do : ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BIND_TEXTDOMAIN_CODESET 1 _ACEOF fi done LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in /*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then ac_cv_path_MSGFMT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" for ac_func in dcgettext do : ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" if test "x$ac_cv_func_dcgettext" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DCGETTEXT 1 _ACEOF fi done MSGFMT_OPTS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 $as_echo_n "checking if msgfmt accepts -c... " >&6; } cat >conftest.foo <<_ACEOF msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" _ACEOF if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } echo "$as_me: failed input was:" >&5 sed 's/^/| /' conftest.foo >&5 fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in /*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then ac_cv_path_XGETTEXT="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : CATOBJEXT=.gmo DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : CATOBJEXT=.gmo DATADIRNAME=share else CATOBJEXT=.mo DATADIRNAME=lib fi ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi fi if test "$gt_cv_have_gettext" = "yes" ; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h fi if test "$XGETTEXT" != ":"; then if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po ac_config_commands="$ac_config_commands default-1" for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 $as_echo_n "checking for catalogs to be installed... " >&6; } NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 $as_echo "$LINGUAS" >&6; } fi if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" cat >>confdefs.h <<_ACEOF #define GOBBY_LOCALEDIR "$localedir" _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } case "$am__api_version" in 1.01234) as_fn_error $? "Automake 1.5 or newer is required to use intltool" "$LINENO" 5 ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo 0.35.0 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n "0.35.0"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intltool >= 0.35.0" >&5 $as_echo_n "checking for intltool >= 0.35.0... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_APPLIED_VERSION found" >&5 $as_echo "$INTLTOOL_APPLIED_VERSION found" >&6; } test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || as_fn_error $? "Your intltool is too old. You need intltool 0.35.0 or later." "$LINENO" 5 fi # Extract the first word of "intltool-update", so it can be a program name with args. set dummy intltool-update; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_UPDATE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_UPDATE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_UPDATE="$INTLTOOL_UPDATE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_UPDATE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_UPDATE=$ac_cv_path_INTLTOOL_UPDATE if test -n "$INTLTOOL_UPDATE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_UPDATE" >&5 $as_echo "$INTLTOOL_UPDATE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-merge", so it can be a program name with args. set dummy intltool-merge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_MERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_MERGE in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_MERGE="$INTLTOOL_MERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_MERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_MERGE=$ac_cv_path_INTLTOOL_MERGE if test -n "$INTLTOOL_MERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_MERGE" >&5 $as_echo "$INTLTOOL_MERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "intltool-extract", so it can be a program name with args. set dummy intltool-extract; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_EXTRACT+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_EXTRACT in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_EXTRACT="$INTLTOOL_EXTRACT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_EXTRACT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_EXTRACT=$ac_cv_path_INTLTOOL_EXTRACT if test -n "$INTLTOOL_EXTRACT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_EXTRACT" >&5 $as_echo "$INTLTOOL_EXTRACT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then as_fn_error $? "The intltool scripts were not found. Please install intltool." "$LINENO" 5 fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " $@;' INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< $@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< $@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.$$RANDOM && mkdir $$_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u $$_it_tmp_dir $< $@ && rmdir $$_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< $@' # Check the gettext tools to make sure they are GNU # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case $XGETTEXT in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_XGETTEXT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XGETTEXT=$ac_cv_path_XGETTEXT if test -n "$XGETTEXT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGMERGE in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGMERGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGMERGE=$ac_cv_path_MSGMERGE if test -n "$MSGMERGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $MSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MSGFMT=$ac_cv_path_MSGFMT if test -n "$MSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then as_fn_error $? "GNU gettext tools not found; required for intltool" "$LINENO" 5 fi # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_INTLTOOL_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $INTLTOOL_PERL in [\\/]* | ?:[\\/]*) ac_cv_path_INTLTOOL_PERL="$INTLTOOL_PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_INTLTOOL_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi INTLTOOL_PERL=$ac_cv_path_INTLTOOL_PERL if test -n "$INTLTOOL_PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLTOOL_PERL" >&5 $as_echo "$INTLTOOL_PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$INTLTOOL_PERL"; then as_fn_error $? "perl not found" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl >= 5.8.1" >&5 $as_echo_n "checking for perl >= 5.8.1... " >&6; } $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then as_fn_error $? "perl 5.8.1 is required for intltool" "$LINENO" 5 else IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $IT_PERL_VERSION" >&5 $as_echo "$IT_PERL_VERSION" >&6; } fi if test "x" != "xno-xml"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XML::Parser" >&5 $as_echo_n "checking for XML::Parser... " >&6; } if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else as_fn_error $? "XML::Parser perl module is required for intltool" "$LINENO" 5 fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : DATADIRNAME=share else case $host in *-*-solaris*) ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : DATADIRNAME=share else DATADIRNAME=lib fi ;; *) DATADIRNAME=lib ;; esac fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi GETTEXT_PACKAGE=gobby05 cat >>confdefs.h <<_ACEOF #define GETTEXT_PACKAGE "${GETTEXT_PACKAGE}" _ACEOF ################################### # Help file building ################################### if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi gdu_cv_version_required=0.9.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking gnome-doc-utils >= $gdu_cv_version_required" >&5 $as_echo_n "checking gnome-doc-utils >= $gdu_cv_version_required... " >&6; } if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gnome-doc-utils >= \$gdu_cv_version_required\""; } >&5 ($PKG_CONFIG --exists --print-errors "gnome-doc-utils >= $gdu_cv_version_required") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then gdu_cv_have_gdu=yes else gdu_cv_have_gdu=no fi if test "$gdu_cv_have_gdu" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: gnome-doc-utils not found: documentation will not be built." >&5 $as_echo "$as_me: WARNING: gnome-doc-utils not found: documentation will not be built." >&2;} fi # Check whether --with-help-dir was given. if test "${with_help_dir+set}" = set; then : withval=$with_help_dir; else with_help_dir='${datadir}/gnome/help' fi HELP_DIR="$with_help_dir" # Check whether --with-omf-dir was given. if test "${with_omf_dir+set}" = set; then : withval=$with_omf_dir; else with_omf_dir='${datadir}/omf' fi OMF_DIR="$with_omf_dir" # Check whether --with-help-formats was given. if test "${with_help_formats+set}" = set; then : withval=$with_help_formats; else with_help_formats='' fi DOC_USER_FORMATS="$with_help_formats" # Check whether --enable-scrollkeeper was given. if test "${enable_scrollkeeper+set}" = set; then : enableval=$enable_scrollkeeper; else enable_scrollkeeper=yes fi if test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"; then ENABLE_SK_TRUE= ENABLE_SK_FALSE='#' else ENABLE_SK_TRUE='#' ENABLE_SK_FALSE= fi DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS" if test "$gdu_cv_have_gdu" = "yes"; then HAVE_GNOME_DOC_UTILS_TRUE= HAVE_GNOME_DOC_UTILS_FALSE='#' else HAVE_GNOME_DOC_UTILS_TRUE='#' HAVE_GNOME_DOC_UTILS_FALSE= fi # AC_DEFINE(GOBBY_CONFIGDIR, [".gobby-0.5"], # [where to store Gobby's config files, # relative to the user's home directory]) ################################### # Output ################################### ac_config_files="$ac_config_files Makefile m4/Makefile po/Makefile.in code/Makefile code/util/Makefile code/core/Makefile code/dialogs/Makefile code/operations/Makefile code/commands/Makefile code/commands/file-tasks/Makefile icons/Makefile icons/hicolor/Makefile icons/hicolor/48x48/Makefile icons/hicolor/48x48/apps/Makefile icons/hicolor/48x48/actions/Makefile icons/hicolor/48x48/status/Makefile icons/hicolor/scalable/Makefile icons/hicolor/scalable/apps/Makefile icons/hicolor/scalable/actions/Makefile icons/hicolor/scalable/status/Makefile icons/HighContrastLargePrint/Makefile icons/HighContrastLargePrint/48x48/Makefile icons/HighContrastLargePrint/48x48/apps/Makefile icons/HighContrastLargePrint/48x48/actions/Makefile icons/HighContrastLargePrint/scalable/Makefile icons/HighContrastLargePrint/scalable/apps/Makefile icons/HighContrastLargePrint/scalable/actions/Makefile icons/HighContrastLargePrintInverse/Makefile icons/HighContrastLargePrintInverse/48x48/Makefile icons/HighContrastLargePrintInverse/48x48/apps/Makefile icons/HighContrastLargePrintInverse/48x48/actions/Makefile icons/HighContrastLargePrintInverse/scalable/Makefile icons/HighContrastLargePrintInverse/scalable/apps/Makefile icons/HighContrastLargePrintInverse/scalable/actions/Makefile help/Makefile win32/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WIN32_TRUE}" && test -z "${WIN32_FALSE}"; then as_fn_error $? "conditional \"WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${WITH_UNIQUE_TRUE}" && test -z "${WITH_UNIQUE_FALSE}"; then as_fn_error $? "conditional \"WITH_UNIQUE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi ac_config_commands="$ac_config_commands po/stamp-it" if test -z "${ENABLE_SK_TRUE}" && test -z "${ENABLE_SK_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_GNOME_DOC_UTILS_TRUE}" && test -z "${HAVE_GNOME_DOC_UTILS_FALSE}"; then as_fn_error $? "conditional \"HAVE_GNOME_DOC_UTILS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by gobby $as_me 0.5.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ gobby config.status 0.5.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "code/features.hpp") CONFIG_HEADERS="$CONFIG_HEADERS code/features.hpp" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "code/Makefile") CONFIG_FILES="$CONFIG_FILES code/Makefile" ;; "code/util/Makefile") CONFIG_FILES="$CONFIG_FILES code/util/Makefile" ;; "code/core/Makefile") CONFIG_FILES="$CONFIG_FILES code/core/Makefile" ;; "code/dialogs/Makefile") CONFIG_FILES="$CONFIG_FILES code/dialogs/Makefile" ;; "code/operations/Makefile") CONFIG_FILES="$CONFIG_FILES code/operations/Makefile" ;; "code/commands/Makefile") CONFIG_FILES="$CONFIG_FILES code/commands/Makefile" ;; "code/commands/file-tasks/Makefile") CONFIG_FILES="$CONFIG_FILES code/commands/file-tasks/Makefile" ;; "icons/Makefile") CONFIG_FILES="$CONFIG_FILES icons/Makefile" ;; "icons/hicolor/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/Makefile" ;; "icons/hicolor/48x48/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/48x48/Makefile" ;; "icons/hicolor/48x48/apps/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/48x48/apps/Makefile" ;; "icons/hicolor/48x48/actions/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/48x48/actions/Makefile" ;; "icons/hicolor/48x48/status/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/48x48/status/Makefile" ;; "icons/hicolor/scalable/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/scalable/Makefile" ;; "icons/hicolor/scalable/apps/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/scalable/apps/Makefile" ;; "icons/hicolor/scalable/actions/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/scalable/actions/Makefile" ;; "icons/hicolor/scalable/status/Makefile") CONFIG_FILES="$CONFIG_FILES icons/hicolor/scalable/status/Makefile" ;; "icons/HighContrastLargePrint/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrint/Makefile" ;; "icons/HighContrastLargePrint/48x48/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrint/48x48/Makefile" ;; "icons/HighContrastLargePrint/48x48/apps/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrint/48x48/apps/Makefile" ;; "icons/HighContrastLargePrint/48x48/actions/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrint/48x48/actions/Makefile" ;; "icons/HighContrastLargePrint/scalable/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrint/scalable/Makefile" ;; "icons/HighContrastLargePrint/scalable/apps/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrint/scalable/apps/Makefile" ;; "icons/HighContrastLargePrint/scalable/actions/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrint/scalable/actions/Makefile" ;; "icons/HighContrastLargePrintInverse/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrintInverse/Makefile" ;; "icons/HighContrastLargePrintInverse/48x48/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrintInverse/48x48/Makefile" ;; "icons/HighContrastLargePrintInverse/48x48/apps/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrintInverse/48x48/apps/Makefile" ;; "icons/HighContrastLargePrintInverse/48x48/actions/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrintInverse/48x48/actions/Makefile" ;; "icons/HighContrastLargePrintInverse/scalable/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrintInverse/scalable/Makefile" ;; "icons/HighContrastLargePrintInverse/scalable/apps/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrintInverse/scalable/apps/Makefile" ;; "icons/HighContrastLargePrintInverse/scalable/actions/Makefile") CONFIG_FILES="$CONFIG_FILES icons/HighContrastLargePrintInverse/scalable/actions/Makefile" ;; "help/Makefile") CONFIG_FILES="$CONFIG_FILES help/Makefile" ;; "win32/Makefile") CONFIG_FILES="$CONFIG_FILES win32/Makefile" ;; "po/stamp-it") CONFIG_COMMANDS="$CONFIG_COMMANDS po/stamp-it" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac ;; "po/stamp-it":C) if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 fi rm -f "po/stamp-it" "po/stamp-it.tmp" "po/POTFILES" "po/Makefile.tmp" >"po/stamp-it.tmp" sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/po/POTFILES.in" | sed '$!s/$/ \\/' >"po/POTFILES" sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r po/POTFILES } ' "po/Makefile.in" >"po/Makefile" rm -f "po/Makefile.tmp" mv "po/stamp-it.tmp" "po/stamp-it" ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi # vim:set et sw=2 ts=2: gobby-0.5.0/configure.ac0000644000175000017500000001327712376161777012060 00000000000000# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) AC_INIT([gobby], [0.5.0], [crew@0x539.de]) AM_INIT_AUTOMAKE(1.9 check-news foreign) m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES]) AC_CONFIG_SRCDIR([code/window.hpp]) AC_CONFIG_HEADER([code/features.hpp]) # Extract host information. AC_CANONICAL_HOST # Checks for programs. AC_PROG_CXX AC_PROG_CC AC_PROG_CPP AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_MAKE_SET AC_PROG_RANLIB AM_PROG_CC_C_O AC_CACHE_SAVE ################################### # Check for Win32 ################################### AC_MSG_CHECKING([whether to enable WIN32 specific flags]) case "$host_os" in *mingw*) win32=true AC_MSG_RESULT([yes]) AC_CHECK_TOOL(WINDRES, windres) ;; *) win32=false AC_MSG_RESULT([no]) ;; esac AM_CONDITIONAL(WIN32, test x$win32 = xtrue) ################################### # Check for GTK+ 3 ################################### AC_ARG_WITH([gtk3], AS_HELP_STRING([--with-gtk3], [Builds gobby against GTK+ 3 instead of GTK+ 2[[default=no]]]), [with_gtk3=$withval], [with_gtk3=no]) if test "x$with_gtk3" = "xyes"; then # TODO: Increase to 2.99.2 once it's out gtk_requirement="gtkmm-3.0 >= 2.99.1 gtksourceview-3.0 >= 2.91.0" gtk_version=3 infgtkver=gtk3 else gtk_requirement="gtkmm-2.4 >= 2.12.0 gtksourceview-2.0 >= 2.4" gtk_version=2 infgtkver=gtk fi required_libs="libxml++-2.6 glibmm-2.4 >= 2.18.0 giomm-2.4 >= 2.18.0 gthread-2.0 libgsasl >= 0.2.21 $gtk_requirement" ################################### # Check for Mac OS X ################################### # Check if we are running on OS X, for special link handling. if test "x$build_vendor" = "xapple" ; then AC_DEFINE([PLATFORM_OSX], 1, [Define whether we are running on Mac OS X.]) # Check whether we are running the native quartz backend if test "$gtk_version" == "2"; then target=`pkg-config --variable=target gtk+-2.0` else target=`pkg-config --variable=targets gtk+-3.0` fi # If so use ige-mac-integration if test "$target" = "quartz" ; then AC_DEFINE([PLATFORM_OSX_NATIVE], 1, [Define whether we are running on Mac OS X with the quartz GDK target]) required_libs="$required_libs ige-mac-integration" fi fi AC_CACHE_SAVE ################################### # Check for libraries. ################################### PKG_CHECK_MODULES([gobby], [$required_libs]) PKG_CHECK_MODULES([infinote], [libinfinity-0.6 libinftext-0.6 libinf${infgtkver}-0.6 libinftext${infgtkver}-0.6]) AC_CACHE_SAVE ################################### # Check for unique (optional) ################################### AC_ARG_WITH([unique], AS_HELP_STRING([--with-unique], [Enables support for single-instance [[default=auto]]]), [use_unique=$withval], [use_unique=auto]) if test "$with_gtk3" != "yes"; then unique_req="unique-1.0 >= 1.1.2" else unique_req="unique-3.0" fi if test "x$use_unique" = "xauto"; then PKG_CHECK_MODULES([unique], [$unique_req], [use_unique=yes], [use_unique=no]) elif test "x$use_unique" = "xyes"; then PKG_CHECK_MODULES([unique], [$unique_req]) fi if test "x$use_unique" = "xyes"; then AC_DEFINE([WITH_UNIQUE], 1, [Whether support for unique is enabled]) fi AM_CONDITIONAL([WITH_UNIQUE], test "x$use_unique" = "xyes") AC_CACHE_SAVE ################################### # Glib i18n/gettext support. ################################### ALL_LINGUAS="`grep -v '^#' "$srcdir/po/LINGUAS" | tr '\n' ' '`" AM_GLIB_GNU_GETTEXT AM_GLIB_DEFINE_LOCALEDIR(GOBBY_LOCALEDIR) IT_PROG_INTLTOOL([0.35.0]) GETTEXT_PACKAGE=gobby05 AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["${GETTEXT_PACKAGE}"], [gettext domain]) ################################### # Help file building ################################### GNOME_DOC_INIT([0.9.0],, [AC_MSG_WARN([[gnome-doc-utils not found: documentation will not be built.]])]) # AC_DEFINE(GOBBY_CONFIGDIR, [".gobby-0.5"], # [where to store Gobby's config files, # relative to the user's home directory]) ################################### # Output ################################### AC_OUTPUT([ Makefile m4/Makefile po/Makefile.in code/Makefile code/util/Makefile code/core/Makefile code/dialogs/Makefile code/operations/Makefile code/commands/Makefile code/commands/file-tasks/Makefile icons/Makefile icons/hicolor/Makefile icons/hicolor/48x48/Makefile icons/hicolor/48x48/apps/Makefile icons/hicolor/48x48/actions/Makefile icons/hicolor/48x48/status/Makefile icons/hicolor/scalable/Makefile icons/hicolor/scalable/apps/Makefile icons/hicolor/scalable/actions/Makefile icons/hicolor/scalable/status/Makefile icons/HighContrastLargePrint/Makefile icons/HighContrastLargePrint/48x48/Makefile icons/HighContrastLargePrint/48x48/apps/Makefile icons/HighContrastLargePrint/48x48/actions/Makefile icons/HighContrastLargePrint/scalable/Makefile icons/HighContrastLargePrint/scalable/apps/Makefile icons/HighContrastLargePrint/scalable/actions/Makefile icons/HighContrastLargePrintInverse/Makefile icons/HighContrastLargePrintInverse/48x48/Makefile icons/HighContrastLargePrintInverse/48x48/apps/Makefile icons/HighContrastLargePrintInverse/48x48/actions/Makefile icons/HighContrastLargePrintInverse/scalable/Makefile icons/HighContrastLargePrintInverse/scalable/apps/Makefile icons/HighContrastLargePrintInverse/scalable/actions/Makefile help/Makefile win32/Makefile ]) # vim:set et sw=2 ts=2: gobby-0.5.0/gnome-doc-utils.make0000644000175000017500000006120211776143020013406 00000000000000# gnome-doc-utils.make - make magic for building documentation # Copyright (C) 2004-2005 Shaun McCance # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. ################################################################################ ## @@ Generating Header Files ## @ DOC_H_FILE ## The name of the header file to generate DOC_H_FILE ?= ## @ DOC_H_DOCS ## The input DocBook files for generating the header file DOC_H_DOCS ?= $(DOC_H_FILE): $(DOC_H_DOCS); @rm -f $@.tmp; touch $@.tmp; echo 'const gchar* documentation_credits[] = {' >> $@.tmp list='$(DOC_H_DOCS)'; for doc in $$list; do \ xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ xsltproc --path "$$xmlpath" $(_credits) $$doc; \ done | sort | uniq \ | awk 'BEGIN{s=""}{n=split($$0,w,"<");if(s!=""&&s!=substr(w[1],1,length(w[1])-1)){print s};if(n>1){print $$0;s=""}else{s=$$0}};END{if(s!=""){print s}}' \ | sed -e 's/\\/\\\\/' -e 's/"/\\"/' -e 's/\(.*\)/\t"\1",/' >> $@.tmp echo ' NULL' >> $@.tmp echo '};' >> $@.tmp echo >> $@.tmp list='$(DOC_H_DOCS)'; for doc in $$list; do \ xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ docid=`echo "$$doc" | sed -e 's/.*\/\([^/]*\)\.xml/\1/' \ | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`; \ echo $$xmlpath; \ ids=`xsltproc --xinclude --path "$$xmlpath" $(_ids) $$doc`; \ for id in $$ids; do \ echo '#define HELP_'`echo $$docid`'_'`echo $$id \ | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`' "'$$id'"' >> $@.tmp; \ done; \ echo >> $@.tmp; \ done; cp $@.tmp $@ && rm -f $@.tmp dist-check-gdu: if !HAVE_GNOME_DOC_UTILS @echo "*** GNOME Doc Utils must be installed in order to make dist" @false endif .PHONY: dist-doc-header dist-doc-header: $(DOC_H_FILE) @if test -f "$(DOC_H_FILE)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $${d}$(DOC_H_FILE) $(distdir)/$(DOC_H_FILE)"; \ $(INSTALL_DATA) "$${d}$(DOC_H_FILE)" "$(distdir)/$(DOC_H_FILE)"; doc-dist-hook: dist-check-gdu $(if $(DOC_H_FILE),dist-doc-header) .PHONY: clean-doc-header _clean_doc_header = $(if $(DOC_H_FILE),clean-doc-header) clean-local: $(_clean_doc_header) distclean-local: $(_clean_doc_header) mostlyclean-local: $(_clean_doc_header) maintainer-clean-local: $(_clean_doc_header) clean-doc-header: rm -f $(DOC_H_FILE) all: $(DOC_H_FILE) ################################################################################ ## @@ Generating Documentation Files ## @ DOC_MODULE ## The name of the document being built DOC_MODULE ?= ## @ DOC_ID ## The unique identifier for a Mallard document DOC_ID ?= ## @ DOC_PAGES ## Page files in a Mallard document DOC_PAGES ?= ## @ DOC_ENTITIES ## Files included with a SYSTEM entity DOC_ENTITIES ?= ## @ DOC_INCLUDES ## Files included with XInclude DOC_INCLUDES ?= ## @ DOC_FIGURES ## Figures and other external data DOC_FIGURES ?= ## @ DOC_FORMATS ## The default formats to be built and installed DOC_FORMATS ?= docbook _DOC_REAL_FORMATS = $(if $(DOC_USER_FORMATS),$(DOC_USER_FORMATS),$(DOC_FORMATS)) ## @ DOC_LINGUAS ## The languages this document is translated into DOC_LINGUAS ?= _DOC_REAL_LINGUAS = $(if $(filter environment,$(origin LINGUAS)), \ $(filter $(LINGUAS),$(DOC_LINGUAS)), \ $(DOC_LINGUAS)) _DOC_ABS_SRCDIR = @abs_srcdir@ ################################################################################ ## Variables for Bootstrapping _xml2po ?= `which xml2po` _xml2po_mode = $(if $(DOC_ID),mallard,docbook) _db2html ?= `$(PKG_CONFIG) --variable db2html gnome-doc-utils` _db2omf ?= `$(PKG_CONFIG) --variable db2omf gnome-doc-utils` _chunks ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/chunks.xsl _credits ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/credits.xsl _ids ?= $(shell $(PKG_CONFIG) --variable xmldir gnome-doc-utils)/gnome/xslt/docbook/utils/ids.xsl if ENABLE_SK _ENABLE_SK = true _skpkgdatadir ?= `scrollkeeper-config --pkgdatadir` _sklocalstatedir ?= `scrollkeeper-config --pkglocalstatedir` _skcontentslist ?= $(_skpkgdatadir)/Templates/C/scrollkeeper_cl.xml endif ################################################################################ ## Support for automake silent-rules GDU_V_XML2PO=$(GDU__v_XML2PO_$(V)) GDU__v_XML2PO_=$(GDU__v_XML2PO_$(AM_DEFAULT_VERBOSITY)) GDU__v_XML2PO_0=@echo " XML2PO" $@; GDU_V_MSGFMT=$(GDU__v_MSGFMT_$(V)) GDU__v_MSGFMT_=$(GDU__v_MSGFMT_$(AM_DEFAULT_VERBOSITY)) GDU__v_MSGFMT_0=@echo " MSGFMT" $@; GDU_V_DB2OMF=$(GDU__v_DB2OMF_$(V)) GDU__v_DB2OMF_=$(GDU__v_DB2OMF_$(AM_DEFAULT_VERBOSITY)) GDU__v_DB2OMF_0=@echo " DB2OMF" $@; GDU_V_DB2HTM=$(GDU__v_DB2HTM_$(V)) GDU__v_DB2HTM_=$(GDU__v_DB2HTM_$(AM_DEFAULT_VERBOSITY)) GDU__v_DB2HTM_0=@echo " DB2HTM" $@; ################################################################################ ## @@ Rules for OMF Files db2omf_args = \ --stringparam db2omf.basename $(DOC_MODULE) \ --stringparam db2omf.format $(3) \ --stringparam db2omf.dtd \ $(shell xmllint --format $(2) | grep -h PUBLIC | head -n 1 \ | sed -e 's/.*PUBLIC \(\"[^\"]*\"\).*/\1/') \ --stringparam db2omf.lang $(notdir $(patsubst %/$(notdir $(2)),%,$(2))) \ --stringparam db2omf.omf_dir "$(OMF_DIR)" \ --stringparam db2omf.help_dir "$(HELP_DIR)" \ --stringparam db2omf.omf_in "$(_DOC_OMF_IN)" \ $(if $(_ENABLE_SK), \ --stringparam db2omf.scrollkeeper_cl "$(_skcontentslist)") \ $(_db2omf) $(2) ## @ _DOC_OMF_IN ## The OMF input file _DOC_OMF_IN = $(if $(DOC_MODULE),$(wildcard $(_DOC_ABS_SRCDIR)/$(DOC_MODULE).omf.in)) ## @ _DOC_OMF_DB ## The OMF files for DocBook output _DOC_OMF_DB = $(if $(_DOC_OMF_IN), \ $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-$(lc).omf)) $(_DOC_OMF_DB) : $(_DOC_OMF_IN) $(_DOC_OMF_DB) : $(DOC_MODULE)-%.omf : %/$(DOC_MODULE).xml @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ echo "The file '$(_skcontentslist)' does not exist." >&2; \ echo "Please check your ScrollKeeper installation." >&2; \ exit 1; } $(GDU_V_DB2OMF)xsltproc -o $@ $(call db2omf_args,$@,$<,'docbook') || { rm -f "$@"; exit 1; } ## @ _DOC_OMF_HTML ## The OMF files for HTML output _DOC_OMF_HTML = $(if $(_DOC_OMF_IN), \ $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-html-$(lc).omf)) $(_DOC_OMF_HTML) : $(_DOC_OMF_IN) $(_DOC_OMF_HTML) : $(DOC_MODULE)-html-%.omf : %/$(DOC_MODULE).xml if ENABLE_SK @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ echo "The file '$(_skcontentslist)' does not exist" >&2; \ echo "Please check your ScrollKeeper installation." >&2; \ exit 1; } endif $(GDU_V_DB2OMF)xsltproc -o $@ $(call db2omf_args,$@,$<,'xhtml') || { rm -f "$@"; exit 1; } ## @ _DOC_OMF_ALL ## All OMF output files to be built # FIXME _DOC_OMF_ALL = \ $(if $(filter docbook,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_DB)) \ $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_HTML)) .PHONY: omf omf: $(_DOC_OMF_ALL) ################################################################################ ## @@ C Locale Documents ## @ _DOC_C_MODULE ## The top-level documentation file in the C locale _DOC_C_MODULE = $(if $(DOC_MODULE),C/$(DOC_MODULE).xml) ## @ _DOC_C_PAGES ## Page files in a Mallard document in the C locale _DOC_C_PAGES = $(foreach page,$(DOC_PAGES),C/$(page)) ## @ _DOC_C_ENTITIES ## Files included with a SYSTEM entity in the C locale _DOC_C_ENTITIES = $(foreach ent,$(DOC_ENTITIES),C/$(ent)) ## @ _DOC_C_XINCLUDES ## Files included with XInclude in the C locale _DOC_C_INCLUDES = $(foreach inc,$(DOC_INCLUDES),C/$(inc)) ## @ _DOC_C_DOCS ## All documentation files in the C locale _DOC_C_DOCS = \ $(_DOC_C_ENTITIES) $(_DOC_C_INCLUDES) \ $(_DOC_C_PAGES) $(_DOC_C_MODULE) ## @ _DOC_C_DOCS_NOENT ## All documentation files in the C locale, ## except files included with a SYSTEM entity _DOC_C_DOCS_NOENT = \ $(_DOC_C_MODULE) $(_DOC_C_INCLUDES) \ $(_DOC_C_PAGES) ## @ _DOC_C_FIGURES ## All figures and other external data in the C locale _DOC_C_FIGURES = $(if $(DOC_FIGURES), \ $(foreach fig,$(DOC_FIGURES),C/$(fig)), \ $(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/C/figures/*.png))) ## @ _DOC_C_HTML ## All HTML documentation in the C locale # FIXME: probably have to shell escape to determine the file names _DOC_C_HTML = $(foreach f, \ $(shell xsltproc --xinclude \ --stringparam db.chunk.basename "$(DOC_MODULE)" \ $(_chunks) "C/$(DOC_MODULE).xml"), \ C/$(f).xhtml) ############################################################################### ## @@ Other Locale Documentation ## @ _DOC_POFILES ## The .po files used for translating the document _DOC_POFILES = $(if $(DOC_MODULE)$(DOC_ID), \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(lc).po)) .PHONY: po po: $(_DOC_POFILES) ## @ _DOC_MOFILES ## The .mo files used for translating the document _DOC_MOFILES = $(patsubst %.po,%.mo,$(_DOC_POFILES)) .PHONY: mo mo: $(_DOC_MOFILES) ## @ _DOC_LC_MODULES ## The top-level documentation files in all other locales _DOC_LC_MODULES = $(if $(DOC_MODULE), \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xml)) ## @ _DOC_LC_PAGES ## Page files in a Mallard document in all other locales _DOC_LC_PAGES = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach page,$(_DOC_C_PAGES), \ $(lc)/$(notdir $(page)) )) ## @ _DOC_LC_XINCLUDES ## Files included with XInclude in all other locales _DOC_LC_INCLUDES = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach inc,$(_DOC_C_INCLUDES), \ $(lc)/$(notdir $(inc)) )) ## @ _DOC_LC_HTML ## All HTML documentation in all other locales # FIXME: probably have to shell escape to determine the file names _DOC_LC_HTML = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach doc,$(_DOC_C_HTML), \ $(lc)/$(notdir $(doc)) )) ## @ _DOC_LC_DOCS ## All documentation files in all other locales _DOC_LC_DOCS = \ $(_DOC_LC_MODULES) $(_DOC_LC_INCLUDES) $(_DOC_LC_PAGES) \ $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_LC_HTML)) ## @ _DOC_LC_FIGURES ## All figures and other external data in all other locales _DOC_LC_FIGURES = $(foreach lc,$(_DOC_REAL_LINGUAS), \ $(patsubst C/%,$(lc)/%,$(_DOC_C_FIGURES)) ) _DOC_SRC_FIGURES = \ $(foreach fig,$(_DOC_C_FIGURES), $(foreach lc,C $(_DOC_REAL_LINGUAS), \ $(wildcard $(srcdir)/$(lc)/$(patsubst C/%,%,$(fig))) )) $(_DOC_POFILES): @if ! test -d $(dir $@); then \ echo "mkdir $(dir $@)"; \ mkdir "$(dir $@)"; \ fi @if test ! -f $@ -a -f $(srcdir)/$@; then \ echo "cp $(srcdir)/$@ $@"; \ cp "$(srcdir)/$@" "$@"; \ fi; @docs=; \ list='$(_DOC_C_DOCS_NOENT)'; for doc in $$list; do \ docs="$$docs $(_DOC_ABS_SRCDIR)/$$doc"; \ done; \ if ! test -f $@; then \ echo "(cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)"; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp); \ else \ echo "(cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs)"; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs); \ fi $(_DOC_MOFILES): %.mo: %.po $(AM_V_at)if ! test -d $(dir $@); then mkdir "$(dir $@)"; fi $(GDU_V_MSGFMT)msgfmt -o $@ $< # FIXME: fix the dependancy # FIXME: hook xml2po up $(_DOC_LC_DOCS) : $(_DOC_MOFILES) $(_DOC_LC_DOCS) : $(_DOC_C_DOCS) $(AM_V_at)if ! test -d $(dir $@); then mkdir $(dir $@); fi $(GDU_V_XML2PO)if [ -f "C/$(notdir $@)" ]; then d="../"; else d="$(_DOC_ABS_SRCDIR)/"; fi; \ mo="$(dir $@)$(patsubst %/$(notdir $@),%,$@).mo"; \ if [ -f "$${mo}" ]; then mo="../$${mo}"; else mo="$(_DOC_ABS_SRCDIR)/$${mo}"; fi; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -t "$${mo}" \ "$${d}C/$(notdir $@)" > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp) ## @ _DOC_POT ## A pot file _DOC_POT = $(if $(DOC_MODULE),$(DOC_MODULE).pot,$(if $(DOC_ID),$(DOC_ID).pot)) .PHONY: pot pot: $(_DOC_POT) $(_DOC_POT): $(_DOC_C_DOCS_NOENT) $(GDU_V_XML2PO)$(_xml2po) -m $(_xml2po_mode) -e -o $@ $^ ################################################################################ ## @@ All Documentation ## @ _DOC_HTML_ALL ## All HTML documentation, only if it's built _DOC_HTML_ALL = $(if $(filter html HTML,$(_DOC_REAL_FORMATS)), \ $(_DOC_C_HTML) $(_DOC_LC_HTML)) _DOC_HTML_TOPS = $(foreach lc,C $(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xhtml) $(_DOC_HTML_TOPS): $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(GDU_V_DB2HTM)xsltproc -o $@ --xinclude --param db.chunk.chunk_top "false()" --stringparam db.chunk.basename "$(DOC_MODULE)" --stringparam db.chunk.extension ".xhtml" $(_db2html) $(patsubst %.xhtml,%.xml,$@) ################################################################################ ## All all: \ $(_DOC_C_DOCS) $(_DOC_LC_DOCS) \ $(_DOC_OMF_ALL) $(_DOC_DSK_ALL) \ $(_DOC_HTML_ALL) $(_DOC_POFILES) ################################################################################ ## Clean .PHONY: clean-doc-omf clean-doc-dsk clean-doc-lc clean-doc-dir clean-doc-omf: ; rm -f $(_DOC_OMF_DB) $(_DOC_OMF_HTML) clean-doc-dsk: ; rm -f $(_DOC_DSK_DB) $(_DOC_DSK_HTML) clean-doc-lc: rm -f $(_DOC_LC_DOCS) rm -f $(_DOC_MOFILES) @list='$(_DOC_POFILES)'; for po in $$list; do \ if ! test "$$po" -ef "$(srcdir)/$$po"; then \ echo "rm -f $$po"; \ rm -f "$$po"; \ fi; \ done # .xml2.po.mo cleaning is obsolete as of 0.18.1 and could be removed in 0.20.x @for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc/.xml2po.mo"; then \ echo "rm -f $$lc/.xml2po.mo"; \ rm -f "$$lc/.xml2po.mo"; \ fi; \ done clean-doc-dir: clean-doc-lc @for lc in C $(_DOC_REAL_LINGUAS); do \ for dir in `find $$lc -depth -type d`; do \ if ! test $$dir -ef $(srcdir)/$$dir; then \ echo "rmdir $$dir"; \ rmdir "$$dir"; \ fi; \ done; \ done _clean_omf = $(if $(_DOC_OMF_IN),clean-doc-omf) _clean_dsk = $(if $(_DOC_DSK_IN),clean-doc-dsk) _clean_lc = $(if $(_DOC_REAL_LINGUAS),clean-doc-lc) _clean_dir = $(if $(DOC_MODULE)$(DOC_ID),clean-doc-dir) clean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) distclean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) mostlyclean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) maintainer-clean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) ################################################################################ ## Dist .PHONY: dist-doc-docs dist-doc-pages dist-doc-figs dist-doc-omf dist-doc-dsk doc-dist-hook: \ $(if $(DOC_MODULE)$(DOC_ID),dist-doc-docs) \ $(if $(_DOC_C_FIGURES),dist-doc-figs) \ $(if $(_DOC_OMF_IN),dist-doc-omf) # $(if $(_DOC_DSK_IN),dist-doc-dsk) dist-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES) @for lc in C $(_DOC_REAL_LINGUAS); do \ echo " $(mkinstalldirs) $(distdir)/$$lc"; \ $(mkinstalldirs) "$(distdir)/$$lc"; \ done @list='$(_DOC_C_DOCS)'; \ for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$docdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ $(mkinstalldirs) "$(distdir)/$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ done @list='$(_DOC_LC_DOCS)'; \ for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$docdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ $(mkinstalldirs) "$(distdir)/$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ done @list='$(_DOC_POFILES)'; \ for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$docdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ $(mkinstalldirs) "$(distdir)/$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ done dist-doc-figs: $(_DOC_SRC_FIGURES) @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; \ for fig in $$list; do \ if test -f "$$fig"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$fig"; then \ figdir=`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$figdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$figdir"; \ $(mkinstalldirs) "$(distdir)/$$figdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$fig $(distdir)/$$fig"; \ $(INSTALL_DATA) "$$d$$fig" "$(distdir)/$$fig"; \ fi; \ done; dist-doc-omf: @if test -f "$(_DOC_OMF_IN)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $$d$(_DOC_OMF_IN) $(distdir)/$(notdir $(_DOC_OMF_IN))"; \ $(INSTALL_DATA) "$$d$(_DOC_OMF_IN)" "$(distdir)/$(notdir $(_DOC_OMF_IN))" dist-doc-dsk: @if test -f "$(_DOC_DSK_IN)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $$d$(_DOC_DSK_IN) $(distdir)/$(notdir $(_DOC_DSK_IN))"; \ $(INSTALL_DATA) "$$d$(_DOC_DSK_IN)" "$(distdir)/$(notdir $(_DOC_DSK_IN))" ################################################################################ ## Check .PHONY: check-doc-docs check-doc-omf check: \ $(if $(DOC_MODULE),check-doc-docs) \ $(if $(DOC_ID),check-doc-pages) \ $(if $(_DOC_OMF_IN),check-doc-omf) check-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) @for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc"; \ then d=; \ xmlpath="$$lc"; \ else \ d="$(srcdir)/"; \ xmlpath="$$lc:$(srcdir)/$$lc"; \ fi; \ echo "xmllint --noout --noent --path $$xmlpath --xinclude --postvalid $$d$$lc/$(DOC_MODULE).xml"; \ xmllint --noout --noent --path "$$xmlpath" --xinclude --postvalid "$$d$$lc/$(DOC_MODULE).xml"; \ done check-doc-pages: $(_DOC_C_PAGES) $(_DOC_LC_PAGES) for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc"; \ then d=; \ xmlpath="$$lc"; \ else \ d="$(srcdir)/"; \ xmlpath="$$lc:$(srcdir)/$$lc"; \ fi; \ for page in $(DOC_PAGES); do \ echo "xmllint --noout --noent --path $$xmlpath --xinclude $$d$$lc/$$page"; \ xmllint --noout --noent --path "$$xmlpath" --xinclude "$$d$$lc/$$page"; \ done; \ done check-doc-omf: $(_DOC_OMF_ALL) @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ echo "xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf"; \ xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf; \ done ################################################################################ ## Install .PHONY: install-doc-docs install-doc-html install-doc-figs install-doc-omf install-doc-dsk _doc_install_dir = $(if $(DOC_ID),$(DOC_ID),$(DOC_MODULE)) install-data-local: \ $(if $(DOC_MODULE)$(DOC_ID),install-doc-docs) \ $(if $(_DOC_HTML_ALL),install-doc-html) \ $(if $(_DOC_C_FIGURES),install-doc-figs) \ $(if $(_DOC_OMF_IN),install-doc-omf) # $(if $(_DOC_DSK_IN),install-doc-dsk) install-doc-docs: @for lc in C $(_DOC_REAL_LINGUAS); do \ echo "$(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc"; \ $(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc; \ done @list='$(_DOC_C_DOCS)'; for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \ if ! test -d "$$docdir"; then \ echo "$(mkinstalldirs) $$docdir"; \ $(mkinstalldirs) "$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \ done @list='$(_DOC_LC_DOCS)'; for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \ if ! test -d "$$docdir"; then \ echo "$(mkinstalldirs) $$docdir"; \ $(mkinstalldirs) "$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \ done install-doc-figs: @list='$(patsubst C/%,%,$(_DOC_C_FIGURES))'; for fig in $$list; do \ for lc in C $(_DOC_REAL_LINGUAS); do \ figsymlink=false; \ if test -f "$$lc/$$fig"; then \ figfile="$$lc/$$fig"; \ elif test -f "$(srcdir)/$$lc/$$fig"; then \ figfile="$(srcdir)/$$lc/$$fig"; \ else \ figsymlink=true; \ fi; \ figdir="$$lc/"`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ figdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$figdir"; \ if ! test -d "$$figdir"; then \ echo "$(mkinstalldirs) $$figdir"; \ $(mkinstalldirs) "$$figdir"; \ fi; \ figbase=`echo $$fig | sed -e 's/^.*\///'`; \ if $$figsymlink; then \ echo "cd $$figdir && $(LN_S) -f ../../C/$$fig $$figbase"; \ ( cd "$$figdir" && $(LN_S) -f "../../C/$$fig" "$$figbase" ); \ else \ echo "$(INSTALL_DATA) $$figfile $$figdir$$figbase"; \ $(INSTALL_DATA) "$$figfile" "$$figdir$$figbase"; \ fi; \ done; \ done install-doc-html: echo install-html install-doc-omf: $(mkinstalldirs) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir) @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ echo "$(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ $(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf; \ done @if test "x$(_ENABLE_SK)" = "xtrue"; then \ echo "scrollkeeper-update -p $(DESTDIR)$(_sklocalstatedir) -o $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ scrollkeeper-update -p "$(DESTDIR)$(_sklocalstatedir)" -o "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ fi; install-doc-dsk: echo install-dsk ################################################################################ ## Uninstall .PHONY: uninstall-doc-docs uninstall-doc-html uninstall-doc-figs uninstall-doc-omf uninstall-doc-dsk uninstall-local: \ $(if $(DOC_MODULE)$(DOC_ID),uninstall-doc-docs) \ $(if $(_DOC_HTML_ALL),uninstall-doc-html) \ $(if $(_DOC_C_FIGURES),uninstall-doc-figs) \ $(if $(_DOC_OMF_IN),uninstall-doc-omf) # $(if $(_DOC_DSK_IN),uninstall-doc-dsk) uninstall-doc-docs: @list='$(_DOC_C_DOCS)'; for doc in $$list; do \ echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ done @list='$(_DOC_LC_DOCS)'; for doc in $$list; do \ echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ done uninstall-doc-figs: @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; for fig in $$list; do \ echo "rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ done; uninstall-doc-omf: @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ if test "x$(_ENABLE_SK)" = "xtrue"; then \ echo "scrollkeeper-uninstall -p $(_sklocalstatedir) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ scrollkeeper-uninstall -p "$(_sklocalstatedir)" "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ fi; \ echo "rm -f $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ rm -f "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ done gobby-0.5.0/mkinstalldirs0000755000175000017500000000672212067604151012356 00000000000000#! /bin/sh # mkinstalldirs --- make directory hierarchy scriptversion=2009-04-28.21; # UTC # Original author: Noah Friedman # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' IFS=" "" $nl" errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the `mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because `.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gobby-0.5.0/gobby-0.5.appdata.xml0000644000175000017500000000201012364474462013301 00000000000000 gobby-0.5.desktop CC0 Gobby 0.5 pre-release

Gobby is a free collaborative editor supporting multiple documents in one session and a multi-user chat. It runs on Microsoft Windows, Mac OS X, Linux and other Unix-like platforms.

It uses GTK+ 2.6 as its windowing toolkit and thus integrates nicely into the GNOME desktop environment.

This is the latest experimental version leading up to the Gobby 0.5 release.

http://gobby.0x539.de/ http://gobby.0x539.de/screenshots/gobby-0.4.90-linux.png http://gobby.0x539.de/screenshots/gobby-0.4.5-linux.png obby-users(@)list.0x539.de
gobby-0.5.0/config.guess0000755000175000017500000013030712067561707012076 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-09-25' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU/*) eval $set_cc_for_build cat <<-EOF > $dummy.c #include #ifdef __UCLIBC__ # ifdef __UCLIBC_CONFIG_VERSION__ LIBC=uclibc __UCLIBC_CONFIG_VERSION__ # else LIBC=uclibc # endif #else # ifdef __dietlibc__ LIBC=dietlibc # else LIBC=gnu # endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gobby-0.5.0/help/0000755000175000017500000000000012376162134010554 500000000000000gobby-0.5.0/help/C/0000755000175000017500000000000012376162134010736 500000000000000gobby-0.5.0/help/C/gobby.xml0000644000175000017500000004041212376162134012503 00000000000000 ]>
&appname; Manual &appname; is a text editor that allows multiple persons to edit documents collaboratively over the network. 2009 Philipp Kern Philipp Kern 0x539 dev group
phil@0x539.de
&appname; Manual &manrevision; 2009-05-10 This manual explains how to use Gobby &appversion;, a collaborative editor. Feedback To report a bug or make a suggestion regarding this manual, please file an issue on https://github.com/gobby/gobby/issues. The application &appname; and this manual are both licensed under the ISC license. They are distributed in the hope that they will be useful, but WITHOUT ANY WARRANTY; without even the implied warrenty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Please see the full license text for more details.
Introduction &appname; is a text editor that allows multiple persons to edit documents collaboratively over the network. Changes to the documents are instantly synced to other interested parties. It uses an algorithm which does not require locking or a central coordinator but instead merges the changes on all participating peers. That said, &appname; is currently relying on a central server that relays the editing actions to other users. A public server can be found on gobby.0x539.de. If you want to host such a server yourself, please look at the infinoted daemon. As it is not needed algorithmically future versions might be able to do real peer-to-peer communication. Support for editing over the instant messaging protocol Jabber/XMPP is planed. Depending on the setup of the server, connections can be encrypted through Transport Layer Security (TLS). There is no support for user authentication yet. &appname; is cross-platform and supports so far Microsoft Windows, Linux, Mac OS X and other Unix-like platforms. It is developed on Linux and regularly tested on Windows. As it is developed using the Gtk+ toolkit it integrates nicely into the GNOME desktop environment. In contrast to the older Gobby 0.4 this version also supports local undo and redo, which means that you can undo your own changes regardless if someone else changed the document in the meantime. Getting Started Starting Gobby Choose Applications Internet Gobby Collaborative Editor (0.5) to start the application. You may also start &appname; from the command line: gobby-0.5 Main Window The Gobby main window is split into two parts: a document and server browser on the left and an editor part on the right. Main Window Setting Preferences Choose Edit Preferences to open Gobby's Preferences window. The window has five tabs: User - personal settings like user name and user color (see ) Editor - text editor settings like indentation and auto saving (see ) View - control how the text files being edited should be presented on the screen (see ) Appearance - font and window layout settings (see ) Security - controls security parameters like trusted certificates and encryption enforcing (see ) Personalization Preferences: User tab Text Editing Preferences Preferences: Editor tab Tab Stops - The Tab width setting controls the display of tab characters. In conjunction with Insert spaces instead of tabs it also determins the amount of white space characters inserted into the text when the tab key is pressed. Indentation - Home/End Behavior - Smart home/end controls if the Home and End keys should move to the first/last non-space character before moving to the beginning/end of the line. File Saving - Text View Preferences TODO General Appearance TODO Security Settings TODO Shortcuts This section documents both the set of shortcuts denoted in the menus and those which do not have a corresponding menu entry. Gobby's Shortcuts Shortcut Action Ctrl-N New document Ctrl-O Open document Ctrl-S Save current document Ctrl-Shift-S Save current document under a different filename Ctrl-Shift-L Save all open documents Ctrl-Shift-H Export as HTML (since 0.4.93) Ctrl-T Connect to Server (since 0.4.93) Ctrl-W Close current document Ctrl-Q Exit Gobby Ctrl-M Switch to chat (since 0.4.93) Ctrl-Shift-M Switch to text document (since 0.4.93) Ctrl-Shift-C Reset user colors in the current document (since 0.4.93) F9 Toggle document browser visibility Shift-F9 Toggle chat visibility (since 0.4.93) Ctrl-F9 Toggle document user list visibility Ctrl-Shift-F9 Toggle chat user list visibility (since 0.4.93) Ctrl-Z Undo Ctrl-Shift-Z Redo Ctrl-F Find Ctrl-G Find next Ctrl-Shift-G Find previous Ctrl-H Find and replace Ctrl-I Go to line
GtkTextView's Shortcuts Shortcut Action Ctrl-Up Go to the beginning of the line Ctrl-Down Go to the end of the line Ctrl-Home Go to the beginning of the document Ctrl-End Go to the end of the document Ctrl-A Select all Shift-Ctrl-A Deselect all Insert Toggle overwrite mode F7 Toggle caret visibility
GtkSourceView's Shortcuts Shortcut Action Alt-Shift-Up Move viewport one line up Alt-Shift-Down Move viewport one line down Alt-Shift-PageUp Move viewport one page up Alt-Shift-PageDown Move viewport one page down Alt-Shift-Home Move viewport to the beginning of the document Alt-Shift-End Move viewport to the end of document
About Gobby Gobby was written by Armin Burgmeier and others. To report a bug or make a suggestion regarding this application or this manual, please file an issue on https://github.com/gobby/gobby/issues. Please include a reachable email address in your bug report as we often need to contact the reporters for further clarifications. Mailinglists There are also two mailing lists which should provide a means of contact to other Gobby users and to the developers. obby-announce: A moderated list used to announce new releases of Gobby and its foundation libraries. obby-users: Discussions about Gobby's usage and installation problems. The announcements are also posted there. More information about how to subscribe can be found on https://github.com/gobby/gobby/wiki/Mailing%20Lists . IRC channel Questions can also be taken to the IRC channel #infinote on Freenode (irc.freenode.net). However, you might need to be patient due to you and the developers living in different time zones.
gobby-0.5.0/help/C/figures/0000755000175000017500000000000012376162134012402 500000000000000gobby-0.5.0/help/C/figures/main_window.png0000644000175000017500000005500712376162134015352 00000000000000PNG  IHDR*u6fQsBIT|dtEXtSoftwaregnome-screenshot> IDATxw]e96w$^!?V]uv]-PEW]]XqQA)R,$RH/3d~i?nɝɔ;)w&5̹<>Џ\oB!B{z];Qǵd'2_+{](sR'B!8ؖN<}.~S!`) Wڷ] 3Juc&#^!B! @qQnTO=|domdĦX!BI'r?zѼXlʽO8ӲI;%HB!8詽\v߰zQ]sÿΝr1u$2&N^h_F&E&9+B!Dd[+4ҽ.14)4,X²miZXMȫ1#-\NuT/bd~ ţ2Bҙa3.meO85Hs5*d˲ӉAR{g8uh2,+XOxL+U ..9=rcB!yԮyg `$Hwc߃2?3Gm>!C- nعrP%-fzaˁ~OY,Y1zL"d;[E-ckT740 ˲mp8d9#l}J/^c !8f䡻ɊO=ᅥz ^>wK]Ϧtr}F#kzߐ0\JP׎q_Ŷ_zŲ)n+thFX<ө yGioocwS UյضOFÒMBptwup* <IoIH̽dݻ/߬o~LOos.%罏p/W4;ay\rCk|T-{1>9M-ʕǦWQM c&c>WidU57\1oVnb{}Sn@2mMp'nųOYeYD[,7kfx\Bx*ꩩũL ?~.|7tiW&;|m],wpVnGY^.X;@}t6OVcm)mD֍_v9ip`v^"+fmDE!Ni"hp"[2`뉥}?ᮧ2N;}ըЫ@ޟ^O/>ka2#=$ƶmlf$vڋ߉f!ZbY岫'.FTơX83ɾaq8ztip;YT U i9Dڰh.}gƜeq;ChNnOcv{B>{qኚ3φh箧3 ws| u@w2ݻbY>$<,>|J"#;Pµ z5C$TL;fޖWǜ=~Wz@K.pP)SQQTlr?@<s/~NJph8%Y BnwH`&*R.f/e}Ҧ 68T[:!iu.i anUZ]|Bux!n[P'`c !D+%+QrtLz}c)iFefr Xk1-;7 R{GӀ~IW\3EjO B1 UU0j>?5$p^F>)7<#{6qMCSaN4BŲ>˟*끾MJhUJ+\膍!ks1Jw"јUeNN !D_}o3|ר.w^6zh Z<ӽg㨮T!}6qˆJs\2z!2&zc_B!Ds󭉅B c4 =~Ec$)B!pٗB!|8*^h3۶B!Bh8#Mxnw(d!B!P'KB!b;PK)B!Bπ*!B!KK/!B!D_`7Fo7UvB!1@ӯT,YɮZ>}}=! c܏!BQ>FeҕL۵uvm{2Ʃ|_zi]4}tYC~oXwO?8."(}m7Fe/!BQގʮmKPMO)Ki_?'"u4cބB!D9>.Xik:''SHB2 ٛXz g;~^]@y#wcYV4:?|ڿn|{]pܵ0}]+F%ݥξ]twǜ~yXOf2̸W!B~۶Khſe6z^?\n7_7K^Hӓ淿CGg'y<<~Ӻs&vnέF%m˖.aVc#?cjsfZwZ6l| ۶9o2X۶Ya#眽v̷pmᥗo/Ovq ?#?#?#?#?@e8.;`Anܧi7|ǟ|x0hz#qg>Euu55O꺇rG?^~ӻ?mugeƗxv{dug5joݷP]]ō?بW!BL~Q)]GZ۸(elAg66꺇rSQUoOg2\I`ukxn{w.^{m_틣iq2}[g̠8S)B!'e8O^[S}9uu#^HPS]&fϚ:ʻלr7}cSzllw^s9|<ԟ5s&g?ro/MTWUB!Әt{jn2pm~?tvv|+v8V!B}_kGk9sg?: n򓏙c˫qo܋J |>li]WD"YhP7Wt 罴|] \q٥|k*Y;1ĥۣ򖓹&Op٥QNB!̔ukϰ~[ tj$E+V B!t{ iGd{;7^a@ɛt >4UJad.B!'UnrKO_垾L4 !B@Ev11&B!5_B!B1VFE!BQvFaxb!B!]*t!B!NP .~Uk!B!@"9fZJ3 !B!xQ':B!Bї*B!B#B!H"B!(;!B!ʎ*B!B#B!EgWWI.?oS3Z;:;b~Jx܃. ֶAkDT*E n:M$LqqM!!Fbx|xܚpR.^CUUl&~%{5 W-nøS~6)vmMx< ]43B ۸֨$ ,pr OOtttt:NmMx&qLM^^CcnSU>H-_ }B?7z}$f0MlFs8Bt3_WwOɧaX,UH ݩPrS7mmqd2NgaqlذS#:@3˲un(t:9t0 '\6n͘A,²}XL v ѼeYXEKK i 4vjʾL&"]]A0wq4\#Ye˘j@O%@O'ad2TU%t:qMQTU6(EQ*}ౝ'ӰŅcH҃vDN$V<9^s"gG à"{[M#äit]rXv׶ RBan[1){_;NJ0sxltb:aD42V>PUޣs(A*~24iJ&.PɎॐL$phdv+0z@wl@Q.(NG WDzаPl3P(ʍyo:T ]t-3edtˁg0sCk[t8q:J:'֕N %"62 iӝW5CNpedO 5@N<P0H$.aiA0ĶmĔLeӅ;r dLB"HI%ػh4 Ͳf͛ˡCTh}PTl0ٳh\8f .&sMC_i'~inX,V}0 t:mYTUWaµ%9x}^tۦ2Ť4 (c6a`+RM|!H x`0ib:P{H{};FMsYɾaB3ⴍ$ʗjV BӴnZ}m9Jyդ˧WU5,  oI4M,>a]7ضuX6dH8tK0r#r0z:MW{;sCi4U8o?-l [\ΊSQ*,&0~f777w^b3Xt锿&D4~{p1 v{HSI| XõiSI,B\et&_`1 ۲r /?yk)ZϱAQ˺0_ܔx-l֢6i[UUKIJ#)ٴVA @U4M;!n=]݄B!55r8N6"jSg6J"GuVz _yj:&8o8Ȕۙ~s؊|{<LӤxEUe%MMM̚5Rh.lwq"@ݻwB]!Xmep 0t۶Q_J:DMTU䆩-\r>/=s}TtH,ߎ JnO  e`[B0tNtt: BwcaaP}*Ɠ/ ycfTU% N èBeUd@0;0M`0x&(`yUVհ{׎^R>K19-aP_퇺{7B0v' T*dT*IL:D`:x O%\nP,_h:}RW} ѿ6!Q)jvN>h8ZP3iSHB:{fN$ٱ(ׇ=jV4 K8TI$!vO7Wm}{w" e_fۤR) f6( g6ky=++Q]D9{vM 5qj*u\Q4U%/0#O3)~gLɶm2μ`^E Ù&].xbDroV_@( +*m۶q{={Y^9V+vݾuɽ. ψA'lԉ3rM!N~ӑ0~ i=d2H`yݞBd?@gggaeyޗbjr_i6V?#2 >;}N@Bsmmm3yvSM =/NO*(QSf,kR**BQyEFPٍO h;ӛ۷t v2'h`oRu8W˕{aEM^NpQ[WKMmM!0WcgKz\V-AJ~H}Nl8+.4/X]rQe)b*@@ӲsKUjɮ)8DQ6 8c8*_r|Y l rhd$Ge`|&{KQ1dɦ !B!NxQf~N˜Bo㝯ڎSu&e(\0ISS=BLEQP-s2kc9?1i:Vrfsr&{"]*h9@hS6> Cg7h=L:BshTT0c\յ 1;R5A0\ɂ+N)wVz:1Mƹ ^9. D/?ϜE8p8]4/3/ھ%<>?kι` 4hkib7ig&:bw2q@3:;)giLxms]֜#-1}Y$ۉNXju*hiX}y=>b=qvovlˢ+߂쓜vE8Fu{SϺtLfCW˶عemGqhfYekfZa: BouӦs+Dw)a7=oVJ:#݅,]u*.=I{~Ziÿ,ȗ`Me964֙N&yuӜz83BQ51|gOǑ~k.VvxT"aּEL1{8}-{mH㙯chHCc/˲طs+Gb%4ΙL@L1/ 8].,YWף f{wpow~/}PpMtMsNf4-{jP5?hc%q2D5 4}K" +ߋ 4 a[c}1̘o6N7lyu= 'eSzxu=3.«% 5سMm :{}No~rLf;gҜwsW][ɤS{;`mc:$@s8<'[WwG3/!N%m lЉG ;\P(,]}חE{RT~8s"ݍ3WؿMf^@U݌?,+y{Z>,XKAι䝤I\@+>&Vn*_CCbý^k7#m\t߁ n?زPe5,[}:`xhiޏ#8.ZDUU::ZQjf1Kg+it3iΣ7Nř`1 dcI"M#Չ ,;t<^/;m?=gg70t0ϩk/`4h73fΡ ?ȌYػs Nwv[ٶp%t6`HKW#1{^m=|eş/\BKӾ^xxwt1q=Y7Zt]ǽriRJJُ]P5V Ԭ"^&:t=SY] ~]P5 ˆHW'TpRK9\&xkchW^arpzN^?"2sB\31ƭmּżsT6בIxG!\]7*MxZFD:YpFfE&Ʋ^tU8|l5!Jt{Hƣ1I$VlBQUl*A_zND,mxs+X}&m `Glo%~*BU5z:K6FQ~ PmThӄjG- O>Oz&Exyq5^m8&KF$`g߆rRJJُ]gYȮ-rm̚G}\o9TVqҚuzfp^|e4W3o2]\&xkchW^at8ʤӄGz 2&y &޸*pl{u=oY{~\n7x|ci<^-4gf:z^]1KwEU-~Zc`Ty'b J&p]6dvypl"]h.X3O>?&MY$^4t'j39e4˲Ub:emʉ%yx,=f@vJ{7>wyH%bϓ$Np\SEO™]>供L Z禮~Nz(%OuؿMFg?)ŅW۶12i!k0˪hkai1}gZWJHmi<514?O/M2d;@9FgH>Ѽo/‰VY]ǖW^dڬMM <5uӱLsLof/fM9|1 MiڷN(jv0M3|-4LYnc)VShٴYڎ4ɤmt*m VT:ۦ/Ӵ6g﵌ʚZt84Fl9fMokB<փe[XEoʌ9 z=aL]C#oO06 hNpG>sn2x̞][_p3c.0O bMؖE&b׶Mp:E.z”R`G9 ٽu,]&n6`g RrGi=έ1 MUMo9B?E–WדGqy<֖̚^˙>{[_]+tƅ6i܅>vlD<6xf̚IJ{5wRv‹8w!G YDZmچF>}T@ٿk+} vopM`՚8g;e̚M.?]^gx=w1mѲ {><1 ,F*%OmNdeMP׵z2Xէo~׺ϛ{(5_yGs})z Ckܻ{ ˶=o1^dnymfa΂D5o]7<4 h@q2\&ӏ26^*614x٥\T"^hIC؎4t*' .Q!zh6-h>s.}F&E B#I>P!0<0kFs8HD%HB%()BQ>s 4`!d"Q$PER]*(N!ʃ܌B!BQ TB!eG!B!Dّ@E!BQv$PB!B TB!ewm}m!B!8A-Xv1 T5!D9gO?8D!8qrƹc!(JL't>. !goc(!('௨,i^. !ctBlBUr(BrgB!B TB!eG!B!Dّ@E!BQv$PB!BA'HSS3?$دϙ=sYw B!BF<|t۶ww'zUTVx>D"ɝ?)|Cysp!B!5@%T*Ś5kH&(²ex<(=Ý?1|U\!9wRE3kf#瞳_{ UUǓܲ6wR65dzϽP-ZO?={:+ַ]ÿ??EKK˰_M/oWk>|sO|s7d˖<Ѓ9n7{-xWdkI6db|{?O5}Ӧ<ЃٱumnYl--G-6r9g^_yXy&!y>1*IDATi`?w? z?w(~X LcS)BQN!i~y ömR_|1k׮{D Co 5pMG-|oozB 7}3Zߗoix<\{ǹ577}z~?ǟ[p3ux^ȵlZzPup)~w={sgWչf桇<ǀlrlikmӧ/:MM޷܏^I},NB!FjDai(@4Ŷˆ`]]]$I4TT*i> wtt0k߳f6kY3GC,fG9E^^"֜^ +~.{wn㵗s5nRyZ0ضZ{<|__W^{gm~9.{%d2ip8ضDuz}sYg`Ssf&p`'RT!i-O~syEE7ض|̚9G=^;o{dYak'@Ns0If(ƌ;?|1|?/̞_&n{6}f߽ܪo{nܸ1swg5q՗M89""&rR̽ױgƳ>ve٣st{~T?#Xq笈;gEi{†@A_|wϏ۶E㎋ؾ}{l۶-o7o^{1`6mW׽>9bxwѧw\4˜{ٕW?_0uJu1 S|ؼYώѿ8ohtIQ߉3T?{n?yS?oFoozU8!]g5rıqƟWϻ6F*cnjsL߯y! 8(ʵ{P[6ǖUEշOUwsjѰT;lhÒ /*֒ cБѵ{f+Ư<~9|*lk׮'ƺubݺuѭ[غuk{T-Z}D>nT4YoحG[c vy5gW4oأG8ĦMsΉٳglܸ1:uQWW彑Ԧ!c"n^ -=VTZ}fb#^ #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHsl*S-Q*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG #Tt P*@:BHG >-:*c&Qu42#Tt P*@:BHGT4T?JMU4T>ɳ f2BICe+jLȢ2|6ʀbAq!a^w};=n3OUjɻ\CkZ:;Z >rh >=gJklϟ)rկgUO_=$Ki8SŵkaY3ϊÆC'~lq4n'nkDDĻ_sI|+_Z㱦; 9vT|ȡm۶uG?ig믿KĐ{7ݝNspcIq'Έ^zF{'kgύ >2.tnn3zx?Xx_cӏۺvhvcҤIO7onӹG=bq»c+#"v<ʸwcGuuu̻Ͽxg{~K?nݺ1Zzqq-Ǻ? z?NK:c%m|X;]CeٲeqM7_]tiӹJ/dVg9c}G׮]͈ŋx$8wѽ1gok=/ozj1 s/8}sfE+.ӟ^={6{_~;}~'w^={/}m1q4~~GmٳG]t[x{J.;*;~pW 1~|߾}b_67׼b9昡qOh1{^=ּbdק5%JF͛ɕOW͋;Q̘>'Έ/̞_&n{6}fNP\~UnxՍquwmJ|[7mw 6lx%oW<=ǜ<~\\qռx6^˯:N9kl@K**72E.={Vɓ#ęg}*=}1Ř1_0uJwƸ'Ĉ_?5ࠃ5,]#G]qUf^}Qƨccs3͟F1-:vІ%?^Z%Ɛ#k+ۿb^[^q]ƈ&x/>\X7ӷ5RZ{GxwPl  P#Tt P*@:BHG4*{':ёkHE8ޙ~mѵGTUՑHE8͆u"t]ʈ&t:R{hgW%ߕfwTFHkڿPC h #Tt P*@[xaխ{Dž >o>^mC42tBq/_@a2q/_@a2t֌{:TkƽZ5UJ Mf-G>Zvhoԙb#˫G&`7VeNwx%UȇcBjׯW73>>*"|`DCD5ώgTWw)bndYQ*o:vІZ[;a4v5IENDB`gobby-0.5.0/help/C/figures/preferences_view.png0000644000175000017500000007014612376162134016373 00000000000000PNG  IHDRe 0sBIT|dtEXtSoftwaregnome-screenshot> IDATxy|W#=Zؘ2YJ9~1Lgfne cfP1s sVOT$?Ѵi)iGy|& PMkhBY"6}aж8;ڣP= ! BI&.> @dguYwK@5-q):x@SتPکP:s65BjB|x;H:>X!7{I~-*h z1UQڽԨ5Z$! !NUE㞾te67<)1wqW8I m_~ԎhEYc!ϴ R ,J-UANMj)o$a@u͓ \AVB6Jj "6* )YҢ_~]aw@E{HBjIQILJh\Z `g)?OBѐh1FFIM +b^l"=D~G{k5j'>@̎tңV _(cBV!9pR>[{n\Vl[T-[efjF$Q5Mw }"lmrs1s:qWH ]ul!rCH(?򿆥t$To+Nڦh4Z<9RN}FgtnF=u8z(hRU*U_B芥D<|@ESdOOM*R޴6G-u؃^gw/Y~oQE_G#DR  i}VčfކT1ӵ#r4~ebʥz(YQQ& JX7$F7Mcr"99WoSU6$8*)^H.X3͓ܘՅj[;?Զmjϲ] #G)<|lq1Œr'9DVj+?# Z{ .½-$%6& (v,Qӡ T.nK5`^ƹ70/D!VP8YéIsmjuJnp]E#5EmRʷw7h?;p1(Vj%hxeG j㒠!1Y/)+߰'<_ C4'yK|jhZC0<;a`?@ JL1 ׵Q;)!!ТQz ʹfO0mnMOe7m )O(Y (^'[xYs 9߯#KԬۀA>fש\:@7̓VEߌ7{od x܍N/+!uR] @LcӰ#~.Rpuu%|߯h˿ʫM!{KI4X Ql!^PQTȼ9ؤ9Ak^Tۯ4~0Ɇm~3r[Z j>9;b)«mtcN?5ϥ]coJ£[gHHLdxbs,77۾ %o`1 liaFwnVr3%s͈$kݪwQƽmqDЪyk8~#^P'} wȽxzw̲}N_C#k9v=wa;I~^`V?wOLCia Be(Pp. 7oM m4ZD`5we{nd6c^RV*h9']W9Lb\")7xxv<6JqDt`B]nMY=)HB;%PՎw~iEMEۙ5|3!QI'ipWP#x7c~I"qꅜB6ZEk*R6=՟ Ej'Ip6w$_c>t# )\R*o"..Cܼy /jO!leg+ZVyƞҬ) -+q5Ҏ$-jMbOjoNkmmBWiǣDhS$*ܜ~ꕵɖ'@a)[1K--NjtEbf&ͻ>-96T>xgO|ܢG^icH5?U~X<߅39R^>r3Vfi]zƓ'u-=h5ZӕukfVzu}3Slv-VTKZ[/!hPӢc(2GXW'aa899SN-rOYOI[VMYfHlu[vˣ8]yqO4kٖ55cj$&&2vdj7ů||^*5Rn[ZQ?3it36vPʕ.Ɏ]{nתٲ}{rRie/s/{; *{] Z5q)Ъ{ѣU|$͚׋VB_a)»]ť(WQofqdZ c妞[! u}Y1 #"2Zf݆Mxݸx_]yrr2, 4g|*YR l~evƗ~?5z{׏_]/ޝw xfȚU)7!q>~+>wNWw˹p"ȁ};Q왷s8;φ5?rTYc06.V/"*:];6qJ;&?#s|ђgǶ lߺ;w/3J{ZtԾ ם_._Ð|޴cUg'G{jo\jlܶ ʞA|4?nJ{kzV;o֮ϴ'NfUڱH,]fvȰ;7^* 9m?ɪ&7eҔ%_.cc3VL23g&!!`;S}׃2ۛ_}ewpvvԏȚrig,S?hcteQ'G̞}4 ע.fZ 3ʷQ#S7WWF'i;~3ԏeL>ukT(8t4Gqu)J׼ &{k׍U})Y՗M "2VK9qZ-΂icXhZN=ObiN_dkHH(_M@-[֛kZsqeԈlu妞-VSnqvr!>fti3nxRѻ{7.]WW헝1r.'}hxM ̢'O/o0<0c`l6ɉFr-:»m5_KIN̴MTjRk3w~K}CB4& OukP(su)lcc;},EFE{\=SDEEU]}dTycytoҎ2߭Ƨ^Ma Cvt~ZWqLN*ʖ.{qtPܷ E2%qtR7 .x׬HTt4u|h :P8Zzw#"2R/rSsY+ !ZI{lk)jqDd%< >e`Ё}:/ZBXz=W3c3gmMc{^X2}Yt{tI]3#I忺9#5*U|YoW,kSU͙VБc|:m6{vl͍~Aq _?S iVwܡLRܾ}xbsukzb.Yi |x [6nEdd M}fHUoIs2J[,v_̞zLtEбM/佮t1IJJ_c5,~]z?`ozԟ~-ܹ[1WXM=GѸax8&-]뜴I͍۔+[&SWs ॲe$h(~^c㳱!!! aiX9ϔ L&E&B[: $&&s<}oAWo)wh5og̹&%%+W1zoͽb]QQDFEق%zm/\ok߲E3>[Ȩ*y+)?vNNI1F z~wR =%"*jhߪ)#kT'],q=V2%<,EW+eTT4s.uz3VnOLL;;[BoeꬹY>Wi~[-=1aHʕ-goScݨym'`P6{>m삳3=}CG ٣t3x]!2{tx;ܿycEQ!ڶSn٣T*ҧ+Ct5X/s.cbz!w2_of]vmZPkս/?E@Sfhg?q|)#Nnok~k6ۓKNj=ެbק6nag {[17|eִfal|F`9||%=ݣ+{i Je˔]&_0o`u~O࿬vlڽv}'+/Ն8= [=}acHi(-%gЗ@9so׊^̜<B<ɑRڡPˈ Mr2Jg[u ~V;h;S]~OC |q/={?qR5y&>NhZa-Pzmt?>fD*zWcպ6?XEEj?I(zIΞtۏOiWZ_@*Ui+S{g8>Vi3f59'ٺy= ;~lL> ʕ9^~Z~m2"gmRiuOzKB|x!NN #~ 9d՗/\Ǐs8~?&Es[V\q*T(^prr6?^yeFgG1..0j22>l(NNN4oP]+RǎI1WW2vH19c Ezܽ_T)y3_=CR%sԟO5#::|4FPIQаAL]]\8yy qҿ<~Xw%&66S^^߽w/2,ݓO׳dmJl ۤIw77u._+VԣjJa~_ IDATi NS&T*6aI]Ns. KhҸjKi޻GRtA?g^v,Q[!!ܻ;)Z=}ѻWw[_o|0|666,Y8 T*1.\T*9qo$0 @Wآ9; ꙌQucHJJbY֝\cbayzI:ÌYsrS|{ɓ8">Mi߂W{z0i4]ΔIx啗X~:k׮3i4H"i' \\]Uj54o+oꇽW+UHT+нWtD^ʲnsۃM3j$=zѣ;gȯ]A`*"3o0}є[ҩ F[`h?n1\qQKgҧ(A F]r+,#e 0_ 99۷:m!e }i߮-&MWPTTŋt1#Iي{:"O[ lAyڇ"B+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!H3̮PsQW_*+s\.(x NRNJSsɺ66Ӫ]G<щIsIIZ-,Ǖo}c1M 6Yq&~eZqUM_rV-_*Tb:mt)OsȈOF]}|oy@&jܸqѣG3p@u16[ٓGi2'D=9u0Ǐ 6c^cOsVc#"Xh~~5_`͜'[s1ގ%/9=w>s.` 3+vS&=vnAIӤ<~(܊=:`9۶}n|nŊ1~(/siBCCܹ36l`ɨT*f̘X)wpp %SO3s\_H||< B}ҥGDHNVmeet؁ϗ,eOpw7;v#_ ߺm;sf`ety-N9g/^\%uYDD$J=.]T֓"#=z0sLn߾ΝK.+We٣Gɵ8w8ZCBCuCoͭX0xxsSׯ\Խ7/]bM|b[7n4;e˔a;qttS45\ٲ8::fd:;wb , Os>`Qn|*k3,c}Щx?i2zv~4oFo0aҔ,eϗ(ڵM=EҮm"""ig<)[b]GSF}|Ѫu{jתayu!,Aۨ`b":ksb-0{×2aTO*g:ϴAL蹌Udsk׮ӻoߝ'E #.z~C ΅>|66H!4kgBd0uL BrrSg̢w$BXZIE]iն?jIJJA|tR4|DZ4!r$eFˣBS>u^׫Ec a{O!#IBaE$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBX-qɉ $%&]_HOFS9xK/|^d}򧂓8sg->~jבGu `1(0IYtT*ubbbزe ]1A&? Δ-S~b9dKx/ 2: VdoݺEnݸv*UB6Qivx]M?Ӧ}'6_MR,6v!B_ll,]vL0Fe;#Ux3iXy[HWĘqVjc$%%e|EoVYG*UNpYҎMeTR&]Az ]GbMߟ~ZqUM_rVfW|G||P II5j˲o3{eLL,u7"6^X5lBlj5ΧnT~&Æ ..سZϴZ7c?g?SsZ+I90}tnܸѣ8p`wy- =;!ؿ7ɝ;w!GcӺ5=yV-;~YҎܯ_h-G"8wW̙ʏ?[=܏`FkN9v1i4sqq_gf\| ?'2*Î_~pl7wq)믷duz׮[Om)ZK/}fN=Jbgs:Zrel35쬵ȾW\I@@!!!zj:tEp'66Vx/;8~ nnx3q8h)Nӳ8/~۸$NNN-SсfMh޳rel~mMT}zb+Ý#ԝ~~ّ昝W2>LW־mkLIDd$L:/S)׮\)hZ4j^"2*gѱC{2_?&L1o{C;&Nߓϐ7ڷӍ9"2)fꕛozṃGX' 9;SӋdqy))){2Æ0: c^[NcvZd_Lʐg͚EÆ )[l㔯MJUӠ1#GEgǶz9"wwZ /OO>hx4}ЩO_ `Z63?y׭StI\]]Ɋ96%22vmSEm䒓!E_sZ} gk=?׭CQzm}L``ѱgdhjr"j &&^޺N=(6C˞1|x!f.@_bB<1i2MDˈ{F\ A!AG g ȯY !)0Iٹ+v4:Z-IIy;(!Ȧ-ȗ CN]a >!ȏ$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBX|+zWw=gE/ O֔j˄"7>)r9\rV}} !^ >)gluTQ-q*rs6V3>Szc^ʴYӚի}+/ @ǣ8s, C П+2k>B+Iy899ѼYSBBCuei쏃{KhƸ3mʧq#'&ȶ$mK~91ah;'c,Wh4J%aa9'+wݣtRs3^=e= 1r4Gi !2)/ݫ;s-q௃7 [qL_L|diCtt -sȰ\2ޕ+ӰA}T*A/) pN? ׫GwT*Vߦ۫]&Xjd`ezgN¤)`Jxy1xPoܔf?]AHm3j$=+ +zsJfָ֠ M NRNJSsɺ66Ӫ]GXxB|:g *:111lٲ]a Zd4f@R;;;SLiҷOo܊OI.?UQIjuJ ֭[t֍k׮QR%b%x]M?Ӧ}'6_}7n0zh]~ }(>sgN~*Μ[ܱ.Zl0Nӻ'\f`,\FW%KyW .9zMpQZ d_}ؾu3'BR19gnJΞCБ[w~2Kݏ4ӼեUצ|Eo"*4ϗ,EV`Ӎqq)@JsaahՆ)_ћ>S(9gWק624̡xzM=BuGԣ1c@޽)WX~M,Q.[V1r8+ 'c }7b `8ƌϗB GZt-3o̙ӧ0wL/;?oXgqӕ`kkKBB.FG`|Ms2Sϡy@)у3&:fBB/\dʴ۰3X#z?Sjhji3fEdTSϢc$&&RaR C`71t@r=njۅ&p-RRRe xޕ_o'!!pO"49PTӤ1oٲe8N( )W,Mcf o!pV˿y׭StQ\mۼer=c:f,NKO\P_91Ct)_%ҙӧ2j8%Կ+49PmP{P01rlֵt9GѦ+[X܃\ 3rpmt01!ic4{3!th׆Z,|qb87Xa77$)+ϴA&/.ȯYCu6qMڶi#ҪmG:Ւ#/ZҥJx|yY@VIZG,s5?Xԅ|f !,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$)3Qѻ"_NLLd+u.߸Irr2nnnZfIiIs+(x>)?|p;mZcooǙ+9IBlV%Kp?]ަH888аA}r=^j5~TZXA@6T^,;Zml%vxWE9z츮+9eտBXOʻvC&* b^z߶o򅿍n9{uԱt~s/4x~In^ysz?Ǝ3ݑ핋H7;!eI9""7b&*M'h0LniZ쏃{`Ok2>l(NNN4oPb)<ϗ՟Svww{DFFY"1]]\@VGw6mlvvvԀ3!eIer6ZWVhP*o/OOBo&:RP!ċO_ :W+UbŬ]G'eP IDAT0]2Kow̙ǁҧ߀l)\0Oi<yꏔ)u?+X͘EJJ .E]YWo)L2gMWTi >MWQVM+[q_~E@>^N/ZjBmP{P01rlֵt9GBX1otud/E"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+R`rrbqb̾=~BioYR޹*tHBgV}JNJSsɺ66Ӫ]G~b|q^&TR:qTT%mjsSAc*VaG'06FckojlB< 2)g|!M>7n0zh}[qϽܱ'Oes16[ٓGi2'iY_\z~{w/{?vlߺk/dmW_soɣPTlEa7glBW\I@@!!!zj:theee; bp+VcGe3Ӊxzё &⦷y&M'Ef¸1j6>cmȤ ٙOF~<1ۜ 94tܙ 60ydT*3fQ,c TɒǥKTť))oUߏlj^Mn E6z &vm؄k.)1c@޽)W3͍wPLBo߶yxs+$ _TfkkKBBRsQBw~ްO y汉G;}y̙ xf}wh׆3gMTt4f̶Ek׍_L:{x!S?]Cʯߓۻ︦$@ ZޢWiQTܶκԶ֪WZöںgmgq^G"D Iy$oX{Nr"#4Lo`S+ڙܶ}G}+ -kbL Y;wRk=a֔@Ycr* eﮝ6Ѯrc8k{中Ȉk h?{ 4hˬ)rrrafI3g0v( V[ծB=&UN~tLQ0se,KϿ5qhǪ]!zM(+&sB0__k3 !nO !-PBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPU*^^lS[Y?$ S>AS&QXї:KO[\ř~ّboGҼUC !ͬ/?͙ ߏdSS)}9z,EYZoW^oVK@N|tuU;qQs۱af *:izjxբZ4h܌iT}Z&~Tᝥy8y !M2taU2sv(^իoϯYLѣFΟ2%h:r!+|7(&# M~\~a+OeBX6l١]|۷qܩly !M7+W&uu~Zoʤw)I!OOLz7ǎfM+[mZf gͺ t֕ŋY!T\ :w{R ?wwwE֞"gT/oK,ɤw'dX[,Q"ғ|Bx"ωÆǟFY_m;Tu==ΟfLFZܾ5){6z}{fJ^o4e"'hؤ= ?t:]=r8 ? W>1n(*UwЙ [ZkS4({$&v۹m=V]-QByy=\(">w"#1dTb@Μ=GBB7n0sV0t=qy lh߮-SKzjŋo텣SG`סʿ[0rSG`Bak$BE$BE$BE$BE$BE$BE$BE$BE$BEc q,@(&iB/^:HEO( -Ӻ: Ҫ]'?q߶Z8fkpy a7(pp^>5:111lݺ=3sr uΰ Uh4˗eJӴIc OBl/5lKAg+nBhLL7իW\jժɓ'\z[MlٸҥJYmBrٓW2uT6l6ܨYËSн_\سwZiO4mRlٗ˧^ޤ7/uIگRfm b'ac޼y ѣTmUW+Ac_*VjLxo^PAc>[er6ȷ9UkxӶCgΝ_v*TJǰfz4ZMoZiϱ'w۽pE ye6Oo^B gϞ͵kט4iÇq=ueiDǍظv5q*Em܍bi3hˉ#8zh*VdVp(Fg⥘L&s|€~}7y}QX)o+ϥ*`=fߞ_m;~"UCe:ŽUKMz|[`U?B?h(we:qmZ3ie\,yByժU4oޜׯpA֮]/GJEƒ,ӻ{.ݧdLQ>-h2.+ 3-h2[Oz;N>z{o6n?3^ƞg@>9h~… 4eb:~0bŊ9{.{3?D⸺2?bcc9czΜ9k1Ho^š."""ҥ ̘1^Oppڿ{7 4>]1{MN4kɯJQ^tGEE'Nk^K*^xժýnH;j0>^ F0|`\]O(ZheQQє*Y8r]]]ILlOyώYX_|v3;z^y֘dwܧOBBBq 4уrY7iŗ1=(q#nܠpW#njo^޿+qQ5- 8yzv.\7odv Ңֹa) exɆ 68{< aæ-=~lƌ(峂}1sv(:Ox\z\zGD0%hzrFè=j8..ٞ[vm2{s}f ϟWfdv Ғӹ2!)CCClٲnB/*Vλ׻ߦsCu <>^K6hԴ9 CMݏW_NBٹS0!p4l܌V[6ΖйKW_d%E9yMӸwAbn縱ӹ?ye+}ç25dzW7wIYS>gK?d1d(:kCvm&+W?h({wjy"'a vcq!# 4hˬ)qrrafIA& ph&*mΜѣHH0038ͭn^c7'vf%դtR,^ZuvJ.ki/m[`OsnBY1)<~/MںȍoЯ/zy"ݞB[$,*",*",*",*",*",*",*",*b3&&Bi4pֻsR7|(D߽î~p f!L%3NK%hׂaTfl> q*U=hdGFGerF %9~p/%SW<~:eŘH+tJ2z8B(()z$}uo]F|d:q FY! EA1~DRǜh^FLa NX,]U e!SPVONѥ[7^Jn ;<% e!S[) {;a׮\ ޣalbl{BVCz ={&t1;8k -b++WгgO*WLʕٳ'W\1+ٳF-"}IA1PL&V}ݻ+&=wc+R|Ȓ%Kh޼ŋx{{{{{s…"HsuяZ퉾?;2o<J.o.%_|#66SaOz@8P?~<]taذa|g7B8@Bcbm~so09d|aV\ ƍzUr)^uN:EjdBQbtvOjժ,^C>ܵkW̙Cdd$̙3nݺህ# 4OZm(/YCQNԩѣGYdwԯ____|}}gϞy8b!Dv=ol]6m!GˉTJ6mڔnF!((8*!Dnx[7FKΝw|,4INm6SU>[€#o ,ȊePë-qxr X ʖy:e!xi8yU*ۿۄ&V$6OQHsiU*N͇F:Ib-JvPGyz>)ktNPG`4VB%1)&2ʔz>uޕ;Ӷ-̘8QVB8K,i)Z41ĩ6: o(:j;BMLF#8z0|($&&X}W!žH( !H( !H( !H( !H( !H( !H( !H( !H( !H( !H( !H( !H( !H( !H( !H([W-xa)K'!rNwy/3EOLKѢEhdY۱af *:ihcmnW:#Gm3qFXz -ZQû.;e+D8, 'OzzjNU~evls=rQ&eæ-̜j._f-ߟFٳk'?l… ;Or̙ׄKzu9q]̼IznaILLdoXÆY?f4KѣFΟ2%hzs5VePWgߞ_Yr;~iѱL('g8;3y⻩{Bʕpqqsڽ\|ERpM+ ɩ^nM~%Jij\(F+`u9weiۦ5kmp֬@n])^X3kz,=ǎfMi땫2] yzRӓ)R (T/Y`0nFfafp(׮JQ#cO0"y;!sۑ*Y21Ν(N +WJQy-ZM[,bFOAFF f=KKA Ggggs}M)Y =r2uygfRñ'X0ogÎsc@`(^,iy Z\]]yIo)ʒ8oyk\8fQREZ֭ٝ"EYϒc`ma|v=!B`0qs ʕ*eRLF#`00 Ys&&!s榪Z}}V˘oe`<|XCϟ->^8KOe7K<~L ߯je3\||6aG2}TTҦCg*/N^oYȼ!#Py Za }!*",*",*",*",*",*",*",*",*",*b7G~FyP+G~<^vg&n"'OoohėV:ALPŋ縝ծ-c"݄}{`z4İuVzɁj963 r+$n^@N"s_vFcbN^r UVhL|ɣB͞rFCZ RjLo\>sFMYJF#s}D^?'q.C9?dgڵkL4Çj,ѣ+?cOeDIDATslXGôjϔi,w֮":uhGACٽ{/kVԉ#mӚI?#ؿ/'}TXY\|w)oEQ]Kً=?nnT -NQv۾sߒk7 e/|gϱ}۷?^Oȿex\}{>ayWS.]ʦM(S k׮4mڔ5k֘O;f8V!!iԔVSLZNQCxx ..ZuťS[f4GanëVT=hԴ9O}Yk*V(r|21K]ArzowCѢE=/?~8}*K>e.6m7˿R ܍m9{U|q>SNA.]شi3f@2 hJ,i~\TTuCՕs%ori=|'N$d<Ξ;ϓ'Oh2(ʖ)nyVQ]Kًʔ./rfl_.7""#ТUev\}>}7hРOG{m ͛7nݜ9f<}=\x'(J)R¯Gزs̮G<Wč.\(?nXUyC(^:o2BsaÆ;k9ܻ{3+x*-P ?^j>WL iovČ};1sv!;lV#=fSl͵xblXMg~ޟ_$&&rEƎ`.ϭ?O2!)CCClٲ/ pwwaf hO:qvvvD]~~Nlfϡw]zǫɴqcFQb%w_ J>`M9f^K6hԴ9=~l3%s-Z(׬dm,^)Ç~Ww526_["ՉO/djnܹj0> 2}΢\+W?h({wv3amr/ 4hˬ)rrrafI3g0v( s+5k [c7'vf+c)]~EsLuL5vʊIÜ5 ![hמ1nO !-PBPBPBPBPBPBPBPBPBPBPBPBPBPBPBPBlPYUCYr?6&ɚ !( $th]ZvP ϋ/Yƚ !h4}#JZmWz=qkjYa״Z-f׬ڮUCYF݆lR!BPBPBPBPBPBPBPBPBPBǬ꣘F>рFEӡr; e!b2C䭛y=jyHQ4lGhU/PŽ>ef|V8~hGW\Ocb:tFŘC9:u_{Ka0$9dBI9ۜtNM&0s\AEQz6eA e!(/%RDNI( R6ӏ|0l^!khõigtܿH( (, 常8-h!6t.sFѢh4`2)HGI(I{G߶^ { B8% +ǏQ0 Z'hA4<={Jr0'tĤ5 GG텄@AAQ,D_\|:PLh(IʉI6S+FFԦ;: e!AV&˾L(~/4|BPD4`JDS7$NE ~2ј?ʔkfuLHGl1!i+*xt7iCuHڪ0$kA6ʮVdǑZ%P$m_XEOE}$)]M)2P u^cŴv$tTR iu?:bԣRؙ?bq",CPN4\?rl5O(SJFtyQ¾ؤ~RN+WҭG/ސݿ™|4a{q䟗EBYJ5UabU8 y(v%(D?I}巏?u }̈CV<< ӥRg]u4%xs{hѪ դac_֭h.KLL$/zb<~XVBSqʭs(׎3I6)Ӫ!IivѮm{- v$7o1Bsp&8֭˖~gΜmqz=!seOY7R~Vu ӭsp/ܼӾG߷A)\.̴)ls^Ν܋G =\afO}bŊ{~٩ʕ\'0IL0XTטU_OYsFg;~ZӒvi (;w(R ǓhJ/f~\xQ/Y8.cKG4=|yڤhWX|L^& e!@VV{ESe҃v/@; ww.GUB8|O抛[)r:9 e!I( ^7Pži#=+De:C e!Fx\'+T`Φ׮RTY4l^B1Ή{8 ټ‘Z/AzѻzB1VKAOOZhG1t_iN'}',hu]ѻPKBE$BE$BE$BE$BE$BE$BE$BE$BE$BE$BE$BE$BE$BE$BE$BE$BEzB!iڵ z,Bᐢ#o0fD~?pHc޾HLH1 !CJKX 󷽚n]QL4ObDGaL4~@ݳ(35/)ā@B9Y>KB8J , _IENDB`gobby-0.5.0/help/C/figures/preferences_appearance.png0000644000175000017500000004244012376162134017514 00000000000000PNG  IHDRe 0sBIT|dtEXtSoftwaregnome-screenshot> IDATxw|Se_ini d"D|-  PTTG@EPF6  ]y( %B#g\IS>ߢkd6.\pnjYL};BDD ˝̩3IVh gσ[԰FlMтǝpי91^<\eW{|;.tRzUM{ǹZam'S ),MwDyf0(_X'A Gf-Q. G|2_qh@'8wOKM( U7+n %?BP$e8ggLkNč)^G9Cb;[z~ 5͞ $:8wѫU} p[nR2SNI9q#gna7WymQ]坻i)[^qc ,Gl8jt'Ovmݢ^ ےZ'nO>_{{8v㟡t^l^2/ ݽx>x;fUPť;r.^,fKr% }E0pn65溈 n/Zcd7'X4 d/O;T8 Ï~Rtq,J]%2 v#zx1sG>w6l (X.F{˕Į>T^&j{!ܿY7:xKs*YmEY>2o_$" 9u %99-S!"?:i%Q8NdAb2l荾5w{&}Y~W} N_dr|&1}W+Z!в,5n9z lN_a;{M+Xn7gb4u /I9vU*$,Q̘W{Q%Kn_7DPhn_&Y7nhn ft{SP8Sl0mT ŝĝtT8/xk[Ͽvsd_ln mSчd)ns2!Mp3I)a/:uk8}3g:aYesO&]8_}# 6lpBɂ DAm6*@;$;DHkز1q^l+?ͿY|ý%kdkr@ųwt*Oz x~`$oApG/F]mEҭ.z(O3mL{lc+.GϜf!7?o:#eN'Ŋc][ʷ -w9_ B4 u''[#ޥxZ-jF޶|4T,ęd7J ໷,`xfhTgO'СIJ{p4!珱[&[yey- s:|` .fgkfwnK8y'9Q&]qT#yC.ؿ|:waiEJ1K _Nݬݿbva|OaW?|MֽiL-mѯ`ƦhZ h/KӳeyZ(yO" t`b 9ۮt%v2YW]_Rx'""*W"..J|mą~L;cV*DrJG36OFwgk?ݴ_0QL?@OV %.Q68&BD$\:!""@@𒌝rz,""V],DD$(ED P1BYD e(ED P1BYD e(ED P1BYD e$H<֯^&~׆J`;(Z:U~ gЦʉgΰy c,)Ѹ؜_Ln(_I;nYY/fHĭ9=+nS4q,;ͲהWfL ;KvPvv^KƲ5Vs{nm2cܘ4!n58_ai9!e}&_&-#FBshquB <5fG $9:Βt|*W[ghcb-,+GNYΓlXv-jMk͋u)ظ`YXn;0敱0x|2ϫF_7i.W7,JP+nQo;[7vEfHLLx;vk\ٺ8rcX\>6_δO>J#0ַSv}Ɛٸ,"11L7sK|4:Ukj<{y7~f 1NRX.|g\.III|6c&vyk\om:Ŷ;<~3[mwЦ]qn\閏>GtEGyoXE g߈9̄.7ٴi uq:=Sޥޕװa**VK/ju,~v˘lܼvmZ򉯽߲roWg5Jb)V(m[5hҬ 6Ï?Mw׹|B<--rĉtd̨;/=Xg>T6n){sVf~IoxqfMMk5eYn|k*G໯'XګNVy 6[)}Dỹv,<S޹1We)ŸynjTJl5iԀ?֬Ų>WsI,?дqC؃,-vaMN, :ё 7{^6/JxxqË|˧Ϙȗ_D`OҸqcN' b BXX%=rQQQгl|%"#yi`OW_eЀg,Ahp}{?O?΀~OSHQPNtKZ/`s} +ZbԿW;=N[0]/Ҙ?~׺}FGY/֤aVm1p:̟#5hܰx쁩m_p'unt \Wg^wGKe/Rӭ$&n{Lxeoo> d@Ҵ1чc~6ͫbE ?[Ky^2xv2z O^4:5aXM7aيU)\*+Kf:5Rxi@>І62;~A,J.Yw^:Չ3(={R|(Vf|lJDEy'͐s[[)X Nj^_9]dDwBkmszq;!~;eY޳iفDDl\,%gx~Zs3{xwif.];Ow?/?EEFcǿo۾QժTy7 |iF)+΂X|gY~wƁ_֦wc-tCd誼w]yi86nDٰi /=wwl7hvErr2ۍ>w0 ݷmACGx3;i۪^#3n:?.T ;wߺm4IVͳ4f˲IC9rF eXbQ۴o˲h׺LxF ҿd)->?szi|SҺ4E_gƜY={pM7ÏpCZy[;Pz-{anN*+u_L^\w]ڴTɒ~zǞ˂GJCчy}ʻԨVc{GּڛD>'0y38@F%v_;- 0גG'#N`-s svS-M?x{\26S/9bb(W4u}ث?_}_llu7OnͲE;?t/u{3gxٝW'A{Ufxyi苼4KƁunb77SON;j0yʻ1, {\A'DFki=73;e˔C=7͍Z-]CYn93I]wcǖƼ/}(I/n7k_]-t"u[ݗJVi YwZyU]O}a:}tz֫dq n9}iy-}& ǖll;oʹ7rd(^yE6[=9Iwʆ3j@l6 %no e5泿',)Kќr8Y׬&cˈicN8}2'v!dnhx6mf{(D^wؑBk&wfٺj7Ⱦ' tъ\ ]/SAkJklm7HD$`pgWT(D,"bA""Q(D,"bA""Q(D,"bA""Q(D,"b|WUjd\Dj"_r].۶nJ#:C7-" wߧY6TQ[[f{{̥Zڢ5im>)WAjhtm 'OâiS!|94oE5ŋHkCߠ}6cm[b7x.i,Z?%L5U>l6 g?6[sY_2rtmm۾?n <-׆/fЭ#8N?f_6|-JbE89>mx+^GPPwſ~}&44R_CF)g :%m%J{|!Ϻ?֬eߜ>}˲8zX-.)/^FEE^69?Ok2i«lٰȵhIII|w/i7#GrQ^?]]. *DRR^ JD\;}t',7̝>Fdd}M/i4o֌})^<=Ǐe䘱<ܥQQ|m\ ߖ.h졋o}?Ι]vrzl`q8쎜M:>-ǎtD<vGDҨ- f7k ׇ˕K)[<# ׿$Xb W-YV(r}YaqD`Gu4a[+HJJR(g;+: dvەCI'Y!mc u 9)1611L(M\);E;{; IDATr}P,7)U;t o(̉בh wE`<XV~ɉDfױw׎lˏyYfƎ}sGL(g'N0q,':DhP&vyMW?wrk+g,g|VΌ䜌3g1dpV‹CaYV<{NOSlf|6RJr1XoNI㆞rb*}_.Uf%k~1k6c_өY7nKǰ(ά_΂; +V0xJNXX1noߎϦfT\vd˖?= "j֥Zͺ za X-yW[nks\L}ojD5`\JPr*:.\ίĈQcS5j?k,id_~eT\77ci=tѓ*kSJuڝXJHH\&7f=?|~_1%%&PTROɓX C1slv9 ˰=-Y[]1c&>5cY5jTgG0cLs4vMwB;ƺu8xk׮#!!!ÃbJ9 kWѦUK8S>a$f8p'cY77mU,1쥑 xUrs \j5."&&I_ϝ`ع/_1=l۶~C?>y=ӇM0sg[>1uѓn]vrVXJ 2r+~ڤoX|<h?T6o·sfͪe8NƌeY "fżoDz,_~/f؞+A|9kժVZ_jU5@5M HL}M_B:71r ǎÇIHp0?֍-nϙ-Æ xX s֛rj,fN',+WqM} Y<,aCy~VW_ۧ=o>EJDERP!0ƒYN1T=218[7l3(B sXd}}3wXyd?~1kg_ ϲp`Y0I?WOdט$2>.Zx+Ԯa̜ەLJr_ gz3,v>`g=6RRR<(U"TIIN~: y$)ɉ|3wcG#k׭ca>P2*SV2*8L^/ie11*s[ƒYS&OwgS(X Cy[}g :a2n3g`+66k*Ὰp>L6֝?bE qgۙ ,Ŋq/5)[Xn+ -W!5֓ػw=+V mBҥ8zsS.?e =js߾է?clٳvYKj՘:e2+~a/ š#2SxXx!oZK,_cpݻ}pyg{ZO֭3˯y|ڵǯ5~ĄDy6okrW3ekᮏƒԪY|7=n߮5ǎ#668F2۵7m҈WM,ѯдI#cJk̸ WspBwgcltc^h?W'=۷ Arr2npL 8Aw>4ҫա}[~cq_{a޳g}²,N>MA/21l~/}g{~dm9w{ NwѭSlܼ˲ظi3z>="Ps9=؉76އp&MޯO/iu{GZޑyS޴q#hߦ5eѾmkbh8Pvm:uEt'[t!*רȬדStt-AQ~blތ^}S~cƿ6qcFf8/q] =NڵںX_~" Ѭu{^׫>օ֡KԾ>?͛aY/Gu,fLy웑Ӓs(4>ҍ{tߧ~k͍Z-]CYn93'9yH6 ?ɉ |6|'_~Eطku 94r / }Nӯvg|BE/{lehuF}ѫ_y/~оH^}wPNmʖ-s 2fH""YsLy"L(c]H_ʘpɢ|r}P6Uɚr}PHU,vma\5?m`9~,[NEDr pFfFeN_[ȝ,"fٹk')顤C~&,_+֯ݟQ+aQ$I'ׇnHb4oݎD,,HFl L@3Ne݁38gphNED$K e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD ȰlMOv)"r4 KrfӬeԨí-Z3qWRoЪmԨC;U=n+"r}(0qoۆmVLAmW^Üf2yxo Cw۶n]\iw/ӿ@t:hf̚O&44 }ED ,, p6**@,qdESH!oZ&>ӱ#hIII|w/B k/2t',7̝>Fdd}M/O=[Lyv>'"9PX8پ%qn][G.o""$O_% e(ED P1BYD e(ED P1BYD F?, ˅uۋd͎fwhlݜ8vK%nS<"FohX86Y>]VXJ2tW%KXj͚"(84%'e9x`6WJJNID pPAֽ$rRx#@8\n7]9=tr(eYN"riLL<X>}!lY:[p&b<ʖeNY$u-2 eH׭<X F׭<z/"WO c<-ˢEl߱=;%/-{mE 5˲;n<}>C{Q e4}qEӢi٢g݂?Z UC@ קϧb*~Z8Ob3y{`~0 Zo٣;L}k;S;S%$&0p TYj50IHL𔗫p=~9oҮCGlwſB6X*o3jrM \DB¹w[ǩRT㑮݈'%%2bhԫO7)KIIfԽTp?6ya9wf#28пgy&;e-ٷmӚx֬YeY,_GѦu~v &qP4-~L8٫+WlX6Z2š~{6aX~W+WfsE0in=zҭk֮^KPZFzS>7ٶm;yz{*7o9_f2N'cƎcϵgvjTy^ZUٶ7M e,&dm6(>XSGǺaO;y2l`ΰ!/0g}А:u7LSv$sROvL~MfnxͳTTy⽎I`O47PPA @fz.ٶddqoՉs_9 6SKOtaZiu ѣ,X'OR 44<`$eYҥ "}"00 c+[={V}ר^SR3~[C^bٯ?y9 o<-77`:u z#g>-_."3iDEFd*^w7oQlڼ&M_Y^[Rwkݺejzt과}֌;8bc8no綗SoAl߱dn Θq'..ѯyq: d} yiWx#ǼC;~ѯN=p= >{loA9~lrҽs1mc&ч}0x7MS0b4_1fn@֭I.|rl~+g޽/WqcFzwcZtN>M-yWOO藇ʸ98w?,z'NNaYO|SXGCҽ'111/_'s-e/oYr]ٷ/ӉNwuvsoKs4Pq zIN; COrbMn=p֯JغauNC.Ѿ]۩Ӹ1vH3>NOƩGYZyo=zCwʖ3K[ eF_c{y39j:<ʖea\ܢ58[_hu<hNYD6?G>Z,a>m6;%Jb;(m#we箝,6#Ne# |lZ6φdaQ$I'ׇnHb4oݎD,?."f6 g0AΜN:>lvP9=,;_H$"(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P 6[l9{۝͊Ų %)ÁݞXxdIdg""Ffwph£JekUjcڕڶUw"vZn38eg""1BYD e(ED P1BYD e(ED P1BYD k"brah. l6;qŻS(a͉cXWJv4j| E±eWu^H,\)\e8t_֬XUhּAW?!<̲<}͎+%%8mЄuo ))I,"Y`[|np|_WyeY9=\jAH>`U*H~p w._ݻ_2?f oIwp\ ePNHH q"!O` t#lv, np+ R 4VN`%yGL(ze +"u w'OHZVC@ fqC҂9u6SؖHhZ8AhH}yBY$,~/!1)\hYle)]^Km~P.N:/w `RCutPv;[(lwZn0:2uY(S:qr3}!H~`:JNX Iư@ݻS*-[A=w|n}S:[v%'h">LDDLǓV/..R%zt0bI,E6, p+ߴa:IENDB`gobby-0.5.0/help/C/figures/preferences_editor.png0000644000175000017500000006560412376162134016712 00000000000000PNG  IHDRe 0sBIT|dtEXtSoftwaregnome-screenshot> IDATxwXSoX( VTT{mk[[ϭumZ:ꬳnk{ZuWD$ $J7P l gΜgtqdZM%_A)Q {{Uf@,~?x 3޵<8~^3ܸ06½Ǹo;1Cxrq+7qO0~npxr REmS3=3[ 9ǃ}_%}LeZVC"EXE]/K͏@9KR g7~lZ_"ɬcc_帩?]c%o:ɵ)y7˕bNhOXڧ _p%̞ÇPq:ϟvxnP'w}탲o? _|F}Wyexbhqw?^/Tpvz *?Zlg-7޵>Sœ}=mNuGrausR{ 6?1_wcgwoZaGV8ZM!+_MG)^ʇ={sQJx8%ҀN$Xscdby 0L#[UEr{yJN s۷C>EP EQ翣yٱCVəCv4/յ^(ϩP(+X^,Bjg=3ڕ͒䵇emS3n| ƭ\z3Iʟ0zĄS͑/DCqlYpC9Βi|) yˋ/L27&B_2. mQ{ yh"4͓l +X08s&l8e.AR3Zm.t:ςqS?K+~[A -Y0k\sؑCR]$; 8i~%tzE,k[#Ʒ}8J6qRx_,-yCp-.UMs-Ny̎wn<,zKc%ygytg\(1:|IRl}a~ .QEQwOqk[-ᶂ Ԑ7=^nXV{`oQOȒ+?V'$8ȠJA\IdzQY65&SᱨW͗Gwv]K;oVn&6G!UBA#(T܀".IO^XU;WOr|jP]M0_߷|>g_hv;Z&W\<>+JyN=}-Y,5FNQ75ErC 6G۸~'6oHAwz|ܔURD_ X65&%go) 9lqvrCc8:ͣe ofH¢MevaBݰ}] 2ه9;xUUQ 7i p.ǿA;CͰO閝݆(" dCbՋ < !H'ŠHRB+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!$e!"v[$"668(_v2B%Mrtd$]:Mȓ6Ulll\lrStܹ}?M$ԭNzc\.((w8»66668Q|UԎY;Is*BmMˮ_Ne(^,6(6x/=7_V1:кco){4|o\9O*;I9qe*ųimiᄟ#:mlz"Zlj.={VSFiiR)qYSs*LN`V7:Egu1etڜ a\gNKػH*cdNE7A[{4yqq[>C[{Ok)9ޙSPt4. |0M4JV S/퓲5؃ =Vxo~{4.l_k>K6gpaNJI?U%ɭOy͕J#In%n㩺޽ԬۈhN>ӧ䮱(r U⇕k5D7cs3fͥADu|PN>nq&|\VracN 鱄Ȩ(Nb)[oޠM^zo?|h(I%1j4QQ,[NJU0i|6s(XЋ ˶FqO?SƧ49rdsjcƌ-?ƾYnt1ưt͚ǁmEJ9ˎ?I>Lj4lښ-lחԬ5>j#"%Vb͏׸U6Ё5Ac ns#88'=?~°჻q_Ϟ3G8zÇ̙;נ˗]{'i Vʊг{WVVkp\Ѱ~Ok'\X2oMZ;w߿uMZZ;~'''>199~Ayɲq+ZPJ-Ob7Wn?aTVrjл M>>,iy/4lښ2?f]@R>֬8^sszy H|y!W.g6nX<>F36_%VdJc׋_gQAS={|Ejۋ'fzU_l*߸Mk8zh/j,2ϫزq W/2E! "In۶qqqՕ)_L~߶ؙ; L0ܹ]g`p%?48g.IIԼըV.(:>s.#(:Ν@U-6oOڣ(:>Co)I/u:~߳`rsA';GJB=oLJ%mΞ8u a/Ν;i-l% 0xͩo2L2W$**h;scؘ .KiEGnrgH/Ο}BlY#IY$%wٲ3j`57 "NڍhԬ ,iXcؘ  VZY8~4}qD/bc!:*[[Z6666fNaʵ|t9ٳggԮYOha*`\9˿0)7WWў}{0oE~Feɢa*>cc&>fc,^ۥ4[-[qs¸N#I=wܥxoݾ{}R(‰gbl %?|KDep= @ө6[2et̚(|1ej6}6Eїjق/LeLr [4>SY*/_ϒ{yg|GG5Wa58^ɢV4v{n$_^=sg*^_K\}*7wG̰AQ ٲeŋHj6la:msqq! x%bՒ (TQCPQ+T|DEEV4lۊ?loSv F,Ice];u6gpS'=u2@*nőпw1y.,7fh2_j5sgMgF77~ÓPAb8hKZՊ|l%EAqú|{U|&<hUhټ1ʔN=x ԡov͝Ǥq#;FJ&&=pR>EdqWly;3, E.]V"Mx SM3/geJΟr{ӱ{?"##pVE/OZ6o0IUzUSDj9oeh_w()o|7$0pԱ׺k4]Za'ҤQ}4lѨMdUw/l@@F*uc2mر7Ұ^ >魼ЗlUFKɾЗ^7&s\ߖ ~Uj7!;3J'=+e{T*2B93}J٣lg<~\ۻmVmI4SH/їd0MT{732kOk)9/yR™2MDx!kOk){tMBFUQ;fI~<)/L3ϟw)bs)Ļ.$(;pyUI3O 2^V2BX/;[[<{r֍47?B!66Х+JRB+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!HNż}(a!ȇܧs ֍ol'O0y4N:Cdd$9rd'_޼sdBwU'm'&r |Zjr-_쭌-xwekQۇKZzLϟ'mwҬU[J-OY:}9sҥpt|h<*>6Ncmo_4h̒e Ξ;GvǷU{>;qIBd(:)GEEwv^:ؼNÇj9ORL1u7;3-~qؼ?~/Obu~Xh޴ ϟiF_eW8#Fs̛ͅ3'ק7k\o$ !2 {vmZpI5\XG}ϛ='44v0amؔn3[ޭ j -?'k.@ecCX[1!2 _ȧRbU,C{4IݼI? 0jUٽϔ/&윓_hOȝ;7...>NR\lC@ecCPƷ|ԁ'OA1eؤ(I&Lr&CSO>b󆸽gFsuK!!!Iql];w™yC_>rE !2 uZ-9r@0W#4,0fϝ@LYnAh41ܺ}5ȑ?m[m\FÊUk)ACx(A*P;M.ȸOL?wSg̢SO֭_.>댟C\]];z$;~flٲ1wK.gg>h׆1F ߗo_BF̀W/ Eѱ}.V^Kh. t * r;zxJqjU=q {ؿc4-s7Eqo4j!}ߧC3BdFŠd=N-JY!$e!"ŠHRB+"IY!$e!"'q66(/?$#S{#vo$LF%cCV=<򥨾 nyR~C;fA: IDAT":HRd4QO>E_֯d׏DsQ?J< F'D(XܿK6߫Pzc(:;;;WɊ󰵵`x$)g2ZV )Ke3=ZPH_+2+儷!O㷭%)tU-Df IYu JjiH0g#y8gNxhA"zgrbV7fzĔ+姡A;}*î/]"+eNzg${%Vpqt:- D ܼ~ T*Y)wNT"w[$e.V{.ǏܹsTTӧSHCN"E6cAγw9 ~ѾjժsdiDDDp9j׮͂ ؑٵN:},lȕ ghҸ&LzIHaÆ|<{p/^L ҤR MwESNj5F f$4iX\]\?܍#'Nܵu`ێ8+>3gѶM$mŦkO8{pv @ _w[fʔ)iӆyΝ;_TS~ݲwya]2mRx3gDFFR#~PFժ2y4v3XR:|/_fάI_3Ic2#i}x|7΢E(Qkz<1^B+2mR=c:f̦T|ک+*&SBy6oM: ȕ˙aC%_ڵelќ`y`Di֢ UT6(ݳ۵ko8Yx1O___Ν;ŋ؉%|Wle-lWBx'e=/5nԀƍ _ڹS}{%ugW9?_|C~}_d'wu_+V[lyi- <}Avmٲu-K3IrBdv>)G\S.>+,3mrɪeQ}ٶ %g<w V-#ǰ`,Jz- IYd@F^.Q۶`gg++dN,:EJFV'I9Qκ:*(/O2ĽTv,ΞDMw_Ms6 >!27Y)g2jGj˯;~jkᑏW, yzҨY+4QvkIRdlm锅>֖ :MT1o$L(66ȈdOY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!HI1QDY|{, MF xRgΞzzio;ۓifٺvT]&-i[N$p1wcfΞ˔iؠ~z"XIʊ勹QM֍dء4idLJJsuSVěi/X @Ŋ?kXdV{{CXLߤżٰq356x2hݎ7֗qx2ԬۀM?mїiZfUjPt9 NDDA+VZ)^ROX=CSc.͒e?PjM}|5f<=T (U{/aڌYT\*|*T\5s|Dk4=o_*W+=KcOǷ>7asn&Wn.FuNɵAr >s_6oʅ34i܈q&ˆzH@@c..S^g/sq ±#سk'O6qh^|m2xɕL_\ >$)/&,Yлgw]ˣvTBCBɗ//fL՗m3'Ýlٲ1j0;`qqɝ;E`҄¤ cپslTVZM95b(Ǐԗoݾ'᎓S&k˔םccinܥC7WW&Oorԟ4q<;v܍1#Ω"}HRNgƾڗ~"?AmS1֗>aJ4O<)Ԙ^^y%>БeS7>˟< 'Ƙ;sqs:q`9Ln>Sˠ~pp6\`:Zi"-KCQ8zcs1\ٶe3)O;&? C\\^[ٳg'""Jr77WSp$;sqMi`MbX?S'1Ǖu~SB9RN# ;Ģ(q+g3~">x@ll,ܼɠ!M䔃;wf&8$NE֭e883ndk˗SHx3Niu|iR?AL6SZhƔi3 &(8/Nus0#oZ7GViI| >pB|5o^]O(\5_=hݮ=/^H>ScTP[<"͛2l }ә6c6 ={vgמ_~h֪ 0^~͗8;a5j'G?q4Fʤ/RAZ4kʈaC,>?c`.F0}ԵoV 0_ی;6ѮK?? 5_9E7 8sj,&FGE2mP&:]b}Bya<tHu_̳RVZL7!c^^3(S,X+$l9sѤE[oS47$W)$eE<\>\($m!2& !"ŠHRB+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!$e!"ŠHRB+"IY!;yP'ðHFUv>)g䔚3 !@wA~Xr4jo_j˙ Z#u6d4kՖmw&KQV^K)Y<7b(bx WV׮*KZ0 ?nmu:K.n&xRAc,[NK!WKΝ?p\n߾ø ek׭gƬ9.UG8t(I?\sX<ϞBV^kx Wn\Md\tCy/L>ˢ -a.y&\>1"-_BX @֬Y_~k0fr9;ٙ1F$cMGGGu S4)}{@68|KOSo-tZMu`Ӗ,V!D˰{y0rx@^>~ @&- QK kn/^з {l?~@ܹpqq;i:dؤlJ^ygD;r\_&4h SIv&,\wZ~ٍqY{M˹+$e66ل:vݻw)^8ZmE}ʃ^6/=}O?{1qDW&.͆YKEv\=T (U{lǒe?PjM}|5f<ѱZ-}E*5(Q '"""̍mY@&h;~>ĸ $p1ooDzxT7o y67jn޴(Hx?&&i3fQruV}v #GǗjt ]S'w^ Ks!S&jܿ1cзo4y#W.IF0I_֣w?wų'9w8EaڌYϞ;=;8vOX7Fn2][pjs%%c''[7 )j!>1m< ?rYڶnI9r(׮ϋgiѼ)c[6GőErmƱ 01u,\DpHǎ`ϮmN:_^_젞LX).ͥsqv @TT>Ө(ji3'B {>uƩcGcլۀ5+h< Ev=u̢16v_njWQMPP!޻gr6Ϟ"W.g>ItLYV]֯]M…A3u֬æk4haKS:\<^yo;2՞r<ڷoϖ-[/Q̘12ptt$6^K9{׮ 22Je~PF4lXd ^ԉO7ƎtLy$^+a\cXr=LoLj’ҘۗrΝ;v,ժU[n|y[ٳg'""Ju1qqm/77Wmٌ{4Ύ(} 5...>'wnZʒ92͕~S\aś>˔{ʝ;wf̙.qDGGVVϸ ԙ6c6!!0u,ڶneNu`s& KϲVE`c&L )w38֪E3LIPp0A|9u:[S\Hvmr4 3mZ_`L37#1cڹxG}2)C\b5kUV@O o=c:f̦T|ک+*&SBy6oM: ȕ˙aCo^TX]G24t5xgNʾć|JjU {Av w𡸹RA6h;# x>^'Ncq$4x-RfP~C˗x :9Q>Zj);ś>T/}B&\1Ǐɓ)ftT$ e%V!D /RAu6n/^^;!R$YIrIf:(h4o6(a5$"$eE<\>\He"#,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE$)gpż}({%ożujӰcv:i2`oo+U+WfAɓ!0rFp䏣tqk#>Hy yÏYR0_BL}Xt9u6Ǘ: drt:N[~^æ*[?Gp54dnמK.)kiи9%˔vF,]EQ b8} Ϟ=I;hԴ%>4kՖ3g[G6lB2i֪-۶|yʒ% ;}_]K9fc]vż}xTYժDŽI_sžR\EJ.Ǔ'O?~L(]"aaOl_&X?@(^k͡oJJ~Xh޴ ϟiF_eW${57 [9a߻_ōa ?\sX<ϞBV^k?>J*ϝ?p\n߾ø ek׭gƬ9.UG8t(c@Jy݆M-*)Yzbd\tCy/L> g眴iV܍Vm8;L2VRY4n;yO dIxKl-tZMu`Ӗ2x YfVc k֬ԭS<З퍣#ݺt`::ӨA׊׫lu5\rvf̨F*9)_`o#St зw/{(kGkl߱K_ǮݥSG[zmml,{H2YZTW))z/qOs ͝+W<ח>m|G&- # /Bƍ,?1w<1%Q@y=<޷D| bڌL1^)[rzE/Ë/eaOPX1V3g~oE[TZŋ=%_oZIʖpuu! \]] ^%pwCN?Oމ.sS޷\K,~< 3~UN)>n!fڵW{ʖ% 'OXbj֨NtK>smw}nc,ZNk'l!SپDqOW^FaŪ5|QTݭk'_@x3"""8z8{ Գ)tJt~֜y_/FO?{E[riȑFü&Ӡ~]Ǯݿk<~iɵ#DFFhw)[kVʃCQtl߹ג'C OkNՎ[jࠦo95no_GF. V ϾvHll,k׭FxyO}$)ufܘQ 0}?wSg̢SOϤoccCN1k<za?3KS"hԦfK IDATߧC3Ezڷ֖,HL}~zoBd,VDBXIBaE$) !,VDBXIBaE$) !,VDBXIBaE2g_DGJrB%RЌp1oݺauy)$eM/]L֎jҤe[? { !e2MRV8u(_]ZhntT$SIv&={_/f-[V*WDQZZoVF^ ޺u}ǡ}V/$e6lBP;fA5[oaxbú˛O9u |[Oٱ'Yzz!D /pƎ'Mش~Nbެ߰~24nފ.moԌ%Тu;yS恟=T (U{lUkV.Ep1oٰq356Џ{2F񭄏o%MFIչhZfUjPt9 NDDALǎV/\9Dk4=o_*W+L_D!2I&T(_1'qewI6o+ҶuK͑#GYv^'K)ypwC,Yݳ;׮J;va҄ʤٱkwe󖟙Q(BYDD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYDD""&R$BNFԩ(fW+"f)ߛu>}$j6.\@ɒ%R2}Q+"|ίp~ll=;vWED "9}waλڣ 7Sm۶ШaAA4h+/-bwOфv;3uS$%%Hæ-װ)Ovo)5lJæ-IHHvOWҽW?7jFmL.~ zҠqszO>LS!"\eoz]{-k{:/w{ܯtXn&OeŇԩSWlr/W};8a+>3f%,4tgjN' GXXl߱c'+? Сߙ9^7n$N>.Mq\4l2S|7[mOWriw阪ThNj0>vxWh/b<Ν;Orr27mfy!˯nOCt{ @ɒ%7vj*ZVNU92o41%$$r6!sS"Rbr odӮӋǧGٵ#/COش[Nk?ymGXXiz+2| ߗҥK]Qsb /r|7|˗䇝m/xs_煅/ >!jVˇoVrz>rg׿K>[>mĸQXǶzSU>wl%,4)))4j֊f_JJ n۾wyu9]CezKuuykt\}bM>oVureYos,__jլ pאalݼϮ[(S&]gFͮX>v#Y]jתw̽Gѣ{7*U mva3 ߮!00AnX=T|Ey:'vO8t+P=Mp3˗,vc>Bx+Sr|v{߬ڔ{Nw9mNqyz̙7_… X,/ë^Zqq7.=E}2-{YRwNǻFjǟɴͥlY-iyrt5W!ꢗxWY"J(ɴOеKg]un/^C}54oތ*U*gYs"..U_WZc}sO3c+oSf݌4};Cf>ށaq?9vrfYV ٺyWǁ};00g_X\L=CٲYW'*ht &f(>5ӯ1b0xŌ56fT\9?~sg?s_Կ9y O?w3R(TBl6m6cbyffVvFN|s7#ռٳ9{sahmZhN>psWʔ ,1iݲw3n$w̚ШY+n睴o61F2`홎P<]{ٵ'Ùx#7̪=4}=SnT05w=wѤ9s #陳=2wdXbؙӼY'NxҥKqS.;mZ|OʍnFEꍾW_^ȓs^qԔ ̜<^,\>r ׭-H.>,h)'x },5c=iivf̞K+2\tzG =5U@VZUtEJj*ݺvvJS eetN7gP6!&7DDLD,"b" eQ(BYDD""&P1(EDL|O_9i4-)}a@-@BXH!t:8p>!pdjP2 "80E eB̞BC)[#+a>oz?=+yߩQ(bAԉhJ$v\W|K,R0b2xրdQȵcW<'a˺/H>zP|eϹ3ڲγ3;'^?S(5/""y mܒP'#\F)rXRߙҠi֨MZZ Usc~g,V)bosC9޷0w8 ^ַ׬t?r>}NԺ/8|p_5ĸhڪUfOu/X:M[wp.oNJL(\.,]ΓSg\nHc z r#$e.lߙ8g#}F¸4{jGZ.ڟPްqKbؐ)M3jsiYƿ3ngyb45kEfAc:DvefԿ'I E4a؈ǓHIL|Q|BB"v 1Nyeװ)O$999cZut :Dv;`8WN}i1Zu{mv _%},]Nݩј}]|'t]o䪾ܜC9]WChjP`[(PjPcGLCeȄ2t N+3:;e7_/9~ ^xѽI1ᡱ>X>?{11bPvmb\_63g%,4z`ڰ| ߗҥK_z=69xnV,cmѝSy޽?3?޽?rWiS|rT(_iONaO왳TRg׭r5۵fQdI4͛9|/]K`=XGLr *Sxq}a֬v?4+ʘQ#eyS_:1ʕ-S={NXfxʕ+ˆHNNf3-_Z}x[Opc8wC{wwE}K.'F4bNuԨ^Fjǟq~uKʫ,|y%Kd'ڥ3vfμo?.\pߗvZԹz ᫯мy3T @l)쓩-9AXXiwxfǗ*V~=rz,e\dS9o}Oր@\NNlN|pRi[OT?(lǟi7TZս<:&AǏ#88@RRRPϞMZvr刎up4:GM7alظGŽ-x<:RD iԬ{ÇEۇ]̧UPO>\Ax OS{as[z:S%9.H:@6;hsO_|s4i)WFÆZ卷!%%SLTK*δ<3sqY wy3vD4ap?TBl6m6cb+UkK]3 'YwrUC2t]Yrd)sf`ohԬNڷԘQ#0L8 ٵ']{R)0&͙|_{ݼٳ9{sah>gf;f4[РqsMD]s9Y8s[_v ܜC9WQʕ$,,?D}QV^w(x~ӱf`>ұ}[c[H;֮\Πx*4MDI>έhݩ)oݹqJ)%r/~q]_sD 1Gmd,GZQ뿤?>K%+#ea kAӶP"[9/`v 4\)HP\)"=h@vS(H>&C +M7 e_|dP),o6 }'V4_',ɘ#&݌VwzHY PQs~ۻV2ZJH62/H!DN=P:SyHaP)4IzӬМ(EDLD,"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYD>F IDATD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD," /jlI\.,VDT ,XWwlx5 +W2G?@*կf""bcG)^媖}UC~kGhYD4Jh檖{UCJWH7DDLD,"b" eQ(BYDD""&P1(EDLD,"b"Wc"b>ˉhr,ր|N,R. Ğ8^)V++T]N-*ߪ"E`Q&1@){j ;nf("t'8X֧Hf.NawcXq:ݤB' mnb+[ e\.ȹ3Dat+ kу e?`5+?Ht\NбmXryᄴm!7" /'+ "PNII!u"*9Bd`bbX,rN;b8RFjr)1R;ٕMo7Ȋ 0r0RN:ұp  V+`⻇`\ 4 ŀvip?R,vS,44_P(}))r`qBa](;v93=R '^;?HxٗˁXZߍndz .\,±:/}?c*XK\Ng^z 3ݐH)pOEl{ΟNưB[ӧ*܏4h3'1ֽ|yL{;r~\# e?>}NIM`KA:Xj4OǞkލOdYסg}ШYKۀ/3́}\+ e`qi$cDa4K!PTk]M&őrVuq0wt=]{vSl0ɟkE,z:.]E Iqm]RX{=SPZz`|R6_Y /} ,4A4mҘW_y)ˑrJj*=1͉hܜ'O%%5ս~ tهFоc$˖^p8|jˍ$%%i,"%N;FRƉ}Gvq;rk"{痳:үooؓk}Ǐ`Oz{v%GW? ]ۣl̙E`h|WuW\'\ןŜلʄy^zrjʖ|rL:Vl6N:͙3T\f׭#?9+VG'=k֚rKDfi[gZh8yE@!o^~}㋣e7q-hٙvEaa9}*؞KSRuJ?~h^y %K0Gy3ֳOr-}r-)E@NF{mg2K/Z L5, z`2coצ5_|5CS{ʕ-KtL ըʖ)^ߨa"aq<1u:QBr|=+VX /DEO-u;wkك_j.e[?ng{;,#秽?)9徽{2ksק{Iq拉a\8N;N{GHspA&Lz̔s)/] i (7V"}_`Yyy=+1~K>`+u8i> \p)gt],~u?"RRWFF3,ӶO̚K>ݣ;^߭K$hj^w͙^7zp /N:M͚qFrP|,0.`}>~i`|ȕ|z]_ϲY_VM^^\muN`[03gem^=ݫGb0fpƌz3Q()[B0ŒA0E+[BÀ+7n5 eyQ 'XBKZKhi '߿g0(ZP(K)b!s߭3W^b+H,z-;AAAD}jj렎ZkۤAA e)EAFBԡ{j6fc9g tRTVb>R(mATR2aav\}cj%88Ŋa 9R(|jBhWS BYO\BY\;I)E2Kt3M/ZI*E0JU8ԬU[KJX>0"EX@@ Ė7]8sy%? ZP2-[)E0J2eң7{*˥rXl"E-bnr/"b" eQ(BYDD""&P1(EDLD,"b" eQ(BYDD""&P1(EDLD,"b"V{_ZM -""~)>c'>Ʀ#- $"RS2nn \H>_ 78C?6Z ۳ݺwd}z Al!N0vc@%۷5QDD֦WdTŔ˧IENDB`gobby-0.5.0/help/C/figures/preferences_user.png0000644000175000017500000003711112376162134016372 00000000000000PNG  IHDRe 0sBIT|dtEXtSoftwaregnome-screenshot> IDATxw|б wE*\DE HQD((X+"H^.BYXR 9I}uwΜs;n6Щe ;""?_qᶀ<ܮ}:bb[)x'l+3vX~\ gN-kc{!`3'9s"'8qsߌۻj@~c`xct7`{sFԗvm،m]elKa[ICyÞl؝||ھZjPlT}8y&1>etZ6;yDD@IXmۄV]v*$}5JhH@IrCJ /JAO{:k.o@b]z 䳥ǸAK[RXV+ṯ60c5n\~MdXn˲}rc])'? m7ΓVc+b,[ObYɫ`UOTV@GItõ7KDR6 xi=pB{FT+8lؑu$p$IphL,HzOc:z wO^ʼ;T$#{=N^x[)QnBW}}5ߝm|BjSyoBK\ %f4N_" ,J>q} }Ien+eg}yN>FD :)YP/:צfnW}/[}K|JL\,#w#˱p IO^Iñ͑ ܳUz}pco.5^{\}M<ͮûHa f}8S wĿq3 m~)%SY3m;I5c=à Cퟝ2oZ_8҉HlssK,oM? mkyq8pW \1kTr+RjU5{N>'4znr9ۖLHp'.;cwrQn?Ql؀˙8;-Ya}R`z_یsnqd,] (U4aG3뺄yV;f3~LILE 5ʄ*%Or .:#c*fp:ϭj/tud[Wus)Z,~udX}?iy(rMkO3dCB p((JՊgnY]vQ+>E("@'[жza_K~e@ʁl $.c%!.vnߴg̛V )m b{l %ppr{ViP.9 qP#Ohh&2,_ hS#k>㦷RNo pSihc~?0 (`s&0qI;OEdXUYۯL[F?2oZ}ږ6e|oe宿Chٖq5XSnߎe~e`̵9fk6NTR7]f`@\ĚM)1~_)ۖmy:_i|]lٰeL)1~el=Jivɨߵ~n2Nu*\r(cz%ws(ۮ@4dz+JRR^nZ2ΎiJ*5e/;R߹s]9 Jɓ'ҭ;~O]CzcOx zqT lc/_zuk7˯fPFu *:<=7_~5 bx+ 48'du̜1UVy&M_Ŝc3}Yf5s~vJj|qc[ZUk5nK?ٱ4lڜM3z$$$ϹͭT0? }9g{bb"=ŧ.۶qݼdnhކ: o'q*.۶iNm߶}m;ܙc.\;u$< -iZ1nnKF>jLcQ{Fömvˣ ~zzyñ6kZr;55ᮎٴy=))^itC >,כ1]OOR8N 6?mR B9x GR*^mW<3DEEV>ɏ?gԈ+<Π4cg}Ҕ9r(sɌit >)ׯ^ KYzos;ٳ1-ת%Wr%ʖ.ܟl9Ԩ^ʤ?dMLc#AضMUضŁC=F"7#=O>o7Ԑ,^P{ ۲q#V ۲nO-?WiFYiϞlذm[c[6ڴbÆMݳϧ_ʱ(^dsܞ-MD ۇ%Kgxg'(Q8!tҙ͛xۿGoM \of ㉎bԳִnw_zNdyKk WF{ƍ ǟϟ;wpRcH>e%::[RJe7mTRkլᅢm2++,Q}3H1Ο+\Rm^TR=Kd>8rQ%=rgҬ+1ԬXt) a)\*]f-1qݝ|p8WϿ8wRgF }ڲf:F {".6u =J&4 cU2ñ>ceԞX^6[lL||vH}ҧ@Xq DGOeV.HޏЯ#ضͮ{䋯 }M*Uذq##F=C.{ <֗aY<֥} }jώIҥؾo&Oyo'ξ]/ -}+aȃ/hP6|>ޟzGDS(YxАʔ.yLx-SLYbbϜJ(}kGy%uؿ_"+F3>\߸ qnhuk:;}޽(_l]271*+˓qc۲|L2rOHp0ǎH]Gf^.h&LyLz]֭C3?%^VzwCNuQ.O WGi݊^Qzm^<ֻW4}]rZ06[\E;y/Һ%_‘#G=r^ 䟝|iu3/:#G2[dyڛ]ߘ\=FFnc̸ٻͶ1&oҾmlצ%&NF_JL^*:UyR#GdڵeԞHHH$((OLku)}v[6$bɓL|mrсPZ,ϑQ}?3}z>_](VEKrkt~gΜ^| nOZhΣ=Nzlw@xfK<;rhl{K'`?Ρñ/Wݺxۛ4ϛ~@ͱiӪ9MO5s}ztKs{?PfuN>M7~gM~{vǶC]\oF]6ҫĝ#XMgQY#F>8Ͼ0>%ӭ}Y~iNreС}LmIYEK8v%6WHN4m}oNqQV-MTVle&~kБm݂nNwUKmϯbGA^)CrN&֜ݚ2gsRrs,Yb}\|r? }3֔Y?땒˟{ɸgt8rI~e#!fe9]E3fk17˜.9N#JPncCB6C`:~^;%Hrp {vla?37/LF!"WET2ܶɯ;ED _Q,"bA""Q(D,"bA""Q(D,"bA""Q(D,"bA鸶J R#|?tnjee9sB R*:oqQMeiHN0> 7hn[{UHHN0ŲeQATV)o泏m|'lӞ5rcּ_Ho{Fgoo@uhwl Z>sjK՚uiwM5PN׮=zǢŗzD$0>fL5>b܋_./枻d+Gm>No{FVXɬ_ؾ}F}"UƇ_J8z3ňQм-̘wϿHsIHH gO{=GXX-n ={z>3=5bERhQ=5$qqqAz*"ܴIcfc3/BRR_>w #ʹU[J 5j {=% ^"9RmKJ5Ơp8yϽԬӀӉEV}QwEjS޶H,{bۦزa1%n۷څ1c Пo!O]:E\Ƈ]?q86$m 7.LxUN8I\\ X=zy)T{!su;vǎ @6oJʕiܨ!!<~ƿ%@L*vS4<|»σ]gOI n<}=ڛ)oMs/=;v˶Ohz͔-S_ryxLxUVYN<=l+"yYEK8v%6o֗@N?vM\Us~.?;qſD;:]X1{wң /_6 b$%%w>{D$70Ens[[9YlFpp0ժVIӺU.MDrm݊[t i _IDAT"K򅈈A""Q(D,"bA""[;x<ON"rY9t 夢P<7/sٷgY4EpgG qs$ e!1!Bū]p誖]a[֋3NtI>ʂq{ߴ?.[!K١q[W\q G+d7\9]J*W("bAʒmKDAD(WJDDL'BYD$W?h6*U [Wӽm'BFSzm8qqqV~Lf͹R4ǯxm:R՚zlܴ۾{zjQZ-|cc}ŗxskV6oϕ1Zns֭Y;e(]4o&jka$&&uWqQfMjéS|~_>eʔnOiԨ˗M6lذ![V*?1Aך?XfͷeÆ̞5̸&_vgӝc|=m*kW.m 1H><V-_̊ x /fvrt{'?usk[xj1RXt)gҥ:t &K. tI&n:̙ڵk j*̙޽{/^̬Yشiڵ's U(s!9JRь9o۴3=r8QQ(P' fܟ}6b2c3,Ihh(=?̆m~M& PB< .\EHHw{8{v϶ϭR?6]cƌx/^1c7G<|'mֻ}ԩ;h ,Ȱa}>3DDDl7nQQQѻwo֯_Er%K̴"!!!UW3ʼnlظ3gΤ9GѢ>vYR-[C|}]:vHڵ}8po1ú"##S~7oJhZ5k;ob6/!O gŒ?(Q8LFdd]f,X8jipIc^C ػw/ŋi믹{(R}n/Y$}QQQ.*O\r_'>=5k֒HBb"Wa>~>;HJrc6yQN<5|$vveV_LHH $8`˰/y̬})o |g%66ѣGswGGG3sLNʤIۻvʐ!Cصkn͛7-O{NhX(O Ν;Pﻗ]׶uKzϮ{Xw8x̘1;x8p cʔ)tؑp50`%W95ml/Xc\`f}ɝ~(Mxs+}|ʔn/]4D.zK.)Nc?N\Oޝ;(o\+""Q(KtBS(D,8ײW%xgRRQ( W+^xtynxIXAEp`.&;jVbYzk]Ng KWV؎@OeBYLeg.Ar5xٶٗ/~iN Yк-9]BP/۶-sW)Z$w槙T eCT l۔E6^?y} e9Gymy"3Ze%l,cymy"O,t-PBQ嫏}i-6Ë_~\6 |8o{k?I\Uj'%%1kؔZ?%&&QԨӀu0l('}ӫU}l lܛ9})_'2h@Z'_}k֬lذٳfr"Dk׮cucm~޶Ɓ~'~#˯8Y7Zö-o{ϧ|!:xGRT4_x6m FNTT$ !;g# %Xtǟ1z")\#?m4#"(Q8Fgw'+U$s%Oy⚲r|{<swޚk&S`!Fx-n & ڶp8|,:treˤKe˕-CllY-ayq'%}\te_(nFʕ}o޲RǵjwĶm~_CΊ%PDq>]ٽg/WU-""={R|yvKtV_}':/O\r_'>=5k֒HBb"Wa>~>;HJrc6sn;ڽ͖[ylUw>7b8q$=?vۭ3vcc9˳=ڧ9{K~oz#ϕ|>剕r عs'*T}ҵڶnIٵ{+V_8x+Vߣ/2ʼnlۦGmCĨgy˶<0q.f_J~UܓUrGhִ`>ޙ7K|Cir}ʍLܩ.']jOKkt)Z@Z_W⯾+cĝ8_.;wPX)D:K,^|!(eew$<2BY1O&GS(mjU$ L?LPsl d\6 e9Ƕ7Ջ e8<|w\β<882 S( VP8K_e flSLe<sTBRjԩǺKsXVRN$r8.[ZuTqke`(ULC%yO`!TQ8:WBY *X:bL[!)"W(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED~ e,˟ÊŶ6EfD*aEDpDD~ *a2vnۤղiNKRN#P nRD$_ }""Q(D,"bA""Q(D,"bA""Q(įf-"-[G=p8\.NeN,ٖYwbݟJN%JҤ鍄꼐BY$x,[re+pwnOb%&ijrBV,_L +$ٶſr=q8x.)qzVOYJbbBYD. e R g[+es]D$6mtޕ8 e|+)r"E=;[#=T[{rӝ\dyBY$b(Ǔ0k2%q+\8Nl, ,7x!);'NrtdhԎaB,R>u$EbVa] NWN $lـv''۝|ߑ@X*H$?I')RIJO{W - uW`_'[5ss_XGvv(EYt0 q I8Qfr[i(y-ru$a}(?Yo]6iε}zK:zǝGkYޮH`_씕;{j?yGs4 e@Z8on};{gWi?бSgn)͟(noJQ(T3\SEc͛‘8ogh96tO=ǫA=|'ËHZ5ykipլKuyj;ڶѴYs~v3mИJUjﱁ:uJ+e)ٸ~I>uߍ;WXu;7Ù|;G4O=Kpk,_S8Ub9O//}O2x@֯]zo۔7f |?V-_Lpp0O5eR>ux'ֿnlϟ5ǎQ4<Ιx*_W=oAei6ڵiz[hN{*/τqcm=|CTPG{u7rPl{mSsN:PB[{Ɛ}f QeL#0PNc+0 ְAA3cFo[6i?ݻѳ{4MP.#4D qSy(Fj#4IuMJֱiݟY7Q(s]"<#KsoZ" u"@!WSQWVɟ֙INH0&R(iЖ@TiKٔv_ҟ,GLD*H,\J9,4ڳBM?֔.)L2e S(gBY$_5@ʔ*EpIPP ̷׈/BY$s:ZdN,O\IM,\O:S(e';$m.CHp8.?Bū(Ug6x"y@F׳dfl"?s9~^"yHѢhwbe律.A!_"y"8$.E@r/"bA""Q(D,"bA""Q(D,"bA""Q(D,"bA""Q(D,"b'@b霮CDD::ڎs|)6f:/II9YH 0c;#718q,d/ ׳Zpɉ:ED2\)5ml_DD?/M2IENDB`gobby-0.5.0/help/C/figures/preferences_security.png0000644000175000017500000004565712376162134017301 00000000000000PNG  IHDRe 0sBIT|dtEXtSoftwaregnome-screenshot> IDATxw|W.vFd ˍnA2T(ˁ q,AD@B)+64i~[O]7K:ŵ}Zڹ3 ~QkX1PLgND a[i$&e\~bDBˇI:|OґWDTs }ۘNYsK/œt}x⋷bCöS2m}C.H?kGT&%1N,"sр+i{N"wns{)Xnmٯu)H=W)lˢEgqۢq_,< x<S^=m࡫3sm>Ya9ƺ=,]q~FgDnxy-~΁ XVYrpp0[4#z֫$ t9LUܬe.0sss{P:>]Oz ΚgTx5T:iG8[INͻkݨXEعWhlaSz#Aj߽@εޚsSj}gٻĬ25TۆZLpptzˑ.S-y)3y9yl9L9ƈz8Á4kޒѣG9}+-uڴoY%Ϲd:+0{;@kw1w7)wRh^%?0]=n˿{Qn'8nt|ppʹ11ám<7ÃJ@_?ƭ#ư-] FN&T*/<<\B-ٸt DʻKeyEm¹g@#| c{4yrܵ2~L9 $_}11*aضM@@ {H|A")+%VAio ?.]o22Qέ_T7o5'{ ۓJԊpXw5x!`c Lo"Δ8K?s^6.O`h{QҎ8<%s_`W\**h}| .KZZ*#w <J2Nכ/&217 c% g'\ҀVs\ ?gI)n>Jh&}~;S9OXx<,į^G0ks)2/+ؖE},ӦH dÇhڠ4sy1#1*~>Ӣ߹eNH9sY6p1iQ;T_V/%88ʕ+sojB:dսQ7@Fi[vQtZ<ڱՋgߡ$u,[ݽr'k"Ҏ"7d.<'@ٻ3C;[e=O>4lUc*A3ڬmFOU?CO^c]YeʑB;p9"!0߸3ydZP{7u%O);RHNt9QEʁk;XW!ό]q$Z rвv8hZ\w_/=>FNMjr}L Nή^;_)]vu8zgʹyaacBYʇ!ᢊ2j;ILLdر)TDz HbJyҼթ $26T qpv}s_nnc] 7 "26)`[18 P7вJh*8hY+KyhsikXlпeג}L9Sl.=kAWO"+C @ e9@%;.Je01_Wbo70mlnɻ^֮D6]Yڈ엍}/_CA^fU,+N"4pynuTmw|q"Rе:/NwsQ""gQ#T|._IIUyWw""T 3Vp8f_q""rrA""Q(D,"bA""Q(D,"bA""Q(D,"b.@Lr >}])tۂ!?,z&+PNIJ+;(-Ia)r ĚMs:U~8e[l?>Bۛfw9*Pgjji@trfY"=;2ۍk6β<,Uh31LIV d?UAai(G8_ZD:l^ʸ1fk*<8Y+.RNHCٲΟe,2.LĚJ4g Ǽ]O튻}&?L-/&lbM%3P]d , v Bܳ(kˋ5XS >s)љ jҼ n\WĚJ,g ec[$_kb݅Hg~}(|j˜眖ؼ"3mS]q ƶ|;Svwݻѹsgn~3=w/RQ6vGD emP۶s,lڊrɭsZu)u㘹=}3?-iX\`[ٖwAZj !j.W is-%qpu¯S'vk;"Hludb?Y^m׆O>[k9Ъe *T(_,OF͜yx_>-kI_pb`ٶϲl x~jשr*\z,?'执E붜հ1wMѣT&?[I޶fu5j7ߢ]ԬSϧFԨ]׻AW/|z)wZΔZm t B 0ϽmnϠ{؝GZwfs~KhަcjWmۤCҮS}!;gLhֺw]}]{ѱk/&?ϙ|al<TfϙÆԕqҁl_y .XcTX믽J,]§Y3_@N=xr ;wE3j]rm:t㈉{ 2fO{ZۅAWzxf4Gy \x lҾ{ϽYIrc{xٰa֮&88'| /ݢ}{|<3:`ݺ,Kwli߽swnK0n(^6 ˓ci:&*/)eԙNfjO?uڰ;ϦM̟>K~ZDppO{g6ld_]m+ws?`>c2{J^׮8U8_竅ٳw/xknzNcԪw?Ei٢1q֥۶طO>=Gm{>f͝u\m[\s`fϙcOeƫo=z5ӷ,ׯ˳S=j>|MV,>{23^{[`,S_z)aX~5jժNYtܝyÇ}>3}ʖ-ˢo{,^BE&?<ۖ~?.Y<~L{%n7S_;Fs;|Wc$%9 tzL}1ޜ9Wxsτ1׽+dk};Uնv/yzxvUs̓qqqDT3>6.P5mbJ:ۖ+WQb6ik-۹m[Sq7Ȥx X/~\k˾ ;ts]?o>ὝXFT #&6g.7ld-$%'hǺ cʕ pގF<^Y./ ţEvC3}ر 1_@@IIIp!m]}z3e <<~_E՝ իu67:gH"Wi޴ /Ny۶Yr<,?|)U˜+T Y;v?cªTaϞ=ԩ] ݻfT3>:z7U*[{|Dvm5{.7>g[jתwDHH0=v͙˯KSe=fi|ͷ|Ԭ]{^:Q '((IXٳ*}מkHuDre9v,}/{OfLuaaaDG^:9 SL\7CST\oӶMko!7\}QVM"nc+1i <y)>Eٲe MoɈop|<>dFy^Su+V$rk$g7h>f7gy\Й卾㯿!%%oȣONA&>[GmYx,.㱧+z7n-ۘc~_N aꋯwظ86gL֟+/>= 6..} /sAޅٶmzt1|;:LNqҩϿ*_۶"]:u(PMΡFDu5kDЬIcGcw)gpQ>ko?RRR "00{yyWue^fIH`׻8)g]ƍ_~M~\1Kbӽ}q:uCn{;~;n_F}Y'g?мU;]y ]t>}[t 5htrV xEޏm_E#m֮k,ϾŃ\r *=mjn>$#n_bUC׻n^qMC'ч˵OA[y͙ }{KѥsX]ɰ?:FOw_ĚOƙ+6t 7vZxN~ǥsZ3ɵĚOƙ3pH푛?/Δ gb'SӪ%˯rIJQ(P65XSJ?S>>ʆ3fk*ij3qO)ĚMI(PkE=e1X5dǎw w t: E)y<8)*NҒq1ٵ_66 gLDNLiɇZڲ)'ȿBDLtv`߬T(D,"bA""Q(D,"bA""Q(D,"bA""Q(D,"biԨiK5mYeNɗl˦ |ۧryIIIg͢lAZZaaa4iܐowևygxx ^C9k gHN 6ȭLz`"\|AA[3ߛ׶mf4apa^)ї/2/|G׻Y[LVU ehӞ᷍e˽}g63ߛEӬU;ݏ7z;_x~jE]gQ}ziƫi3u^MŊ s ˖`(>}g۶,_ҧPδ%2oZ]℻cݺL,k~_3e9߲igN}vj9Wp6O=-7cْ᧟ /^o?J7{"s]ASDS*Byq-[g $""I仭7 쏽}{C&{7CC{.оVoݻ/ҸQ#:vhOhܸ?+{-~H(\94Ls W^Ctյ,["qШiK={}]gV  66oò,9yu'"R7gʡC9t0Ny@3&3ŗ3oG%%%aĨ+ IDAT|7:|n]ðeuBܡC|ĝ|ɏ=FDFμLy~k׭pжM1^wo :>1]z$((vmpaޱÆހfևֳ7ujbmb ,;Sv TM`׵tEWeWG3ѣkg{ɲ)k_87h"(MDlGowktP:/_T e(ED P1BYD e(ED P1BYD ׬m˃"<9prp8]]M%>m"!>e~e=]tR5]Gh0|VCqeԭSބ+B)ɬYիӫw?B?4* f{D3p8x.ID rЮS7־Tr,\.cY`yJ~(gmrEiLLRvO_? Mrrrmt8Z5΢Z]ai۵I~]{m8$zx8z<Rʶm8S^ыʡ92tjZ*?SF7ltJmrYb? z`.=LPNLų#'Ԅ2\2s{҈܆mpATǁ={xJ̿))\S)>bZ=r߇37 =J?1nݺ!!ſ)1>gY+Np{,֭Czuӗ[קaóP nǓqǒcO;֭EI8'@Bz{pϸ?gU<&JM([4ܩ)2DŎ;ҿ,cxSS|` 5uyi3IIzw8޾ݲq]\.|UB+\Yտ0ۼ?cT^y-43i=j)Y߇+#p{73+s +z7SӒROBhKcԄrr3F.W 5r Is9&j;wEsVz9Ny=Q\9Ѯsw\x^5y͢zj]Ϻ%}mo٢9Ϙm,Y'=_ȱj+>Kɔ`(ov&մ )GFIؖE3 (1RsMܮOY8 bǎ]ҧ| k]W ǟzO>;ۖBppA슎f#g̙3]wUL;v"-Ϳma}>_ غm{fyz0vܺ4,cy|7nѶ@8h)9tS!a'س%n+Hݵ}pl%-vhRvL9Ng1M):Se8EFp8~p並le|Tζ}=g=6<"_mیqwO>O?[Pܥ},ZF ]I -6s%"%|eKѝkoYe NdV&=0K.@֭*BZ$_Ulќ@Z4o+/Mc63ߛEӬU;ݏ7z >yvtՇ?:|GfNhٽ4Uٴwkb йSG|meY[{M[g[XYrwfm~~^JӖm+}ScvQHib|(W +s;8Sh߾ZΕ2>g|~{?yGjɷ_-*sp%~;r: v8&GٲrvAXª Fa̙qc([, STDz zDJ)wҙ~޽eo0Egӹr@g9s޽ޟ@5 ]S匳L~nV c}Qz<8p*U;,,,}9O`` @P9DzK40L9S\wUCETx_2oٴ7g=ynxg y)sӿo_VM8 UTDz N~ƇCoEKjj["#ޭMÆ0i9@bb"K~[Fx FxYbbc9|8mS6? III4XfܘQ4iܘi/̜y 8z()))c #Fbf7Ty}X߱P%ӹ_"%/ʕ+ǔ8rh(^{6t!|8cIPP0ڶaü}p=!!!#zGʕ7f'ccO0v3o'DA+`lf7gO=&R%6=oܘض_|fQZ8Ǎam0XQ1^w? w:Kp^lcza#9J1[,[]~mm'BDLP1BYD e(ED P1BYD e(ED bYmyxQjB9# 9Uΐw et,R)RʶmaHiuLfMypض5W_u+:&!kEu\Acۙkƌn:̙=5kpp<+V䥗gЭk|J@WKq1wyv }LV- ~+66\ue1TYxErn/Q|_~ӰIss r'{ܵsw}rJ sc{вe lۦez̙7iJO(wd|2αlXyfu޶W^}W ?cͪ3S `:zm׎ğ%99X۶푛9ϾZ͢o_L}i۷\O?|˞={y:Fڲs~5d{]KZld7k泾yf|2A4&3>~s!ڂ9x bY#g|6w&? իQlY.m?ԪUDv#˸#,«1YTVwl/G])8c{h AAAB+E/rntWCn_uyG=ȭ[IKKòl00dQFl 3|(<zM)C֛oLHy;_.^5믽;o^7v~z<޶[wa-#8x cͭOrFq?ǟ"11U޵ Ӧ>w[ۦ cǸ_ƍ;f<Գd te_ YK>`\p5<-[D_1>N=v,[}sxH* &-%ٳaq;zm$jں=Qe-ڇ{vOC0 41kvҵ%9򟿥מGGq Lٶ/OHJ*A_Fm[NPD1*n:KԄ2'?RHJ3[zB?."tJ|(\tԍ~eú?X%3"rjN#jо}GCw99Pv8T\/mYʲ8\.C .rr( p)KpH.EDPJϷĉ e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BO )IDATYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(ED P1BYD e(EDNmQi(;NòVD( d.NgўdajsDԬSӊž; ^H.Pnں=-t,"rj4o۩H-P)CrJ31BYD e(ED P1BYD e(ED P1BYD Ek"bx}4'˅:S(beϲe.Dr:T FZ% GUgv eRqeԭSބ+@O̚KYj9z#()ݞ!R̶-f7p8]RrЮS7־T e R Wsuʷ "϶m(NT(l>-"P9!ϰ~ݿ8OH %#94P() ɤ,An2w Wq8XXnBZ ;Ra$?9;(G8ptreOdBY `ф*+z53Np:i؞v'۝#-$>!eʜ},-"g.o%$r@mW(oy|X8\stg:șΔ-OǾ,76x&CzPQ:AϦs: Mԧ??]Q[Ox\I/$9ؤ_S.IKp023 JT]Ҡp/~Y3'uآ^N EAAׅIIMHKQ5ZRAF8K(ٵk_۷u[[rѴl۞47|S. e3}BؙgT]ky(i [9һb2/ %{pT9aw[ @Ih;"a(ZH:ZEK[D rPb TӉEf:p)Z)[$ &KbE6aL> 3{Mó/Hhvʱj|p?w9{vQS}e%iɟPqkuNQ4swc{_d-) sre:4R.Qc׮' %%n bvM-Yʨ1c5f,?}șWb|uSt- Rr~n9|:e)]Z.:spof\}IÌm~|9f53uJ^3{v/;3^&`b-`ݶu$N¡ @K\n׺P~!ƫm[eፄO-SR9>s?mN^>z~j*^už/YLoP_@ΤvkF?Pqt{׺ȞqKn)+0'΁ԡbdڽ:߸}}HNN⦡Cy} 8)E!bhz:))w7 >˱3R(8@gGixxOS"a3ґBYΤ"G\|OIuivP,ҋ!}}YE'N KfvBYKHpB]#qi.6ybbv=h@gGݛM gKr$>EDpa@4BiO""up ԔH;$IENDB`gobby-0.5.0/help/Makefile.in0000644000175000017500000010426312376162112012543 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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@ # gnome-doc-utils.make - make magic for building documentation # Copyright (C) 2004-2005 Shaun McCance # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software Foundation, # Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. ################################################################################ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/gnome-doc-utils.make subdir = help ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ _clean_doc_header = $(if $(DOC_H_FILE),clean-doc-header) _DOC_REAL_FORMATS = $(if $(DOC_USER_FORMATS),$(DOC_USER_FORMATS),$(DOC_FORMATS)) _DOC_REAL_LINGUAS = $(if $(filter environment,$(origin LINGUAS)), \ $(filter $(LINGUAS),$(DOC_LINGUAS)), \ $(DOC_LINGUAS)) _DOC_ABS_SRCDIR = @abs_srcdir@ _xml2po_mode = $(if $(DOC_ID),mallard,docbook) @ENABLE_SK_TRUE@_ENABLE_SK = true ################################################################################ GDU_V_XML2PO = $(GDU__v_XML2PO_$(V)) GDU__v_XML2PO_ = $(GDU__v_XML2PO_$(AM_DEFAULT_VERBOSITY)) GDU__v_XML2PO_0 = @echo " XML2PO" $@; GDU_V_MSGFMT = $(GDU__v_MSGFMT_$(V)) GDU__v_MSGFMT_ = $(GDU__v_MSGFMT_$(AM_DEFAULT_VERBOSITY)) GDU__v_MSGFMT_0 = @echo " MSGFMT" $@; GDU_V_DB2OMF = $(GDU__v_DB2OMF_$(V)) GDU__v_DB2OMF_ = $(GDU__v_DB2OMF_$(AM_DEFAULT_VERBOSITY)) GDU__v_DB2OMF_0 = @echo " DB2OMF" $@; GDU_V_DB2HTM = $(GDU__v_DB2HTM_$(V)) GDU__v_DB2HTM_ = $(GDU__v_DB2HTM_$(AM_DEFAULT_VERBOSITY)) GDU__v_DB2HTM_0 = @echo " DB2HTM" $@; ################################################################################ db2omf_args = \ --stringparam db2omf.basename $(DOC_MODULE) \ --stringparam db2omf.format $(3) \ --stringparam db2omf.dtd \ $(shell xmllint --format $(2) | grep -h PUBLIC | head -n 1 \ | sed -e 's/.*PUBLIC \(\"[^\"]*\"\).*/\1/') \ --stringparam db2omf.lang $(notdir $(patsubst %/$(notdir $(2)),%,$(2))) \ --stringparam db2omf.omf_dir "$(OMF_DIR)" \ --stringparam db2omf.help_dir "$(HELP_DIR)" \ --stringparam db2omf.omf_in "$(_DOC_OMF_IN)" \ $(if $(_ENABLE_SK), \ --stringparam db2omf.scrollkeeper_cl "$(_skcontentslist)") \ $(_db2omf) $(2) _DOC_OMF_IN = $(if $(DOC_MODULE),$(wildcard $(_DOC_ABS_SRCDIR)/$(DOC_MODULE).omf.in)) _DOC_OMF_DB = $(if $(_DOC_OMF_IN), \ $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-$(lc).omf)) _DOC_OMF_HTML = $(if $(_DOC_OMF_IN), \ $(foreach lc,C $(_DOC_REAL_LINGUAS),$(DOC_MODULE)-html-$(lc).omf)) # FIXME _DOC_OMF_ALL = \ $(if $(filter docbook,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_DB)) \ $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_OMF_HTML)) ################################################################################ _DOC_C_MODULE = $(if $(DOC_MODULE),C/$(DOC_MODULE).xml) _DOC_C_PAGES = $(foreach page,$(DOC_PAGES),C/$(page)) _DOC_C_ENTITIES = $(foreach ent,$(DOC_ENTITIES),C/$(ent)) _DOC_C_INCLUDES = $(foreach inc,$(DOC_INCLUDES),C/$(inc)) _DOC_C_DOCS = \ $(_DOC_C_ENTITIES) $(_DOC_C_INCLUDES) \ $(_DOC_C_PAGES) $(_DOC_C_MODULE) _DOC_C_DOCS_NOENT = \ $(_DOC_C_MODULE) $(_DOC_C_INCLUDES) \ $(_DOC_C_PAGES) _DOC_C_FIGURES = $(if $(DOC_FIGURES), \ $(foreach fig,$(DOC_FIGURES),C/$(fig)), \ $(patsubst $(srcdir)/%,%,$(wildcard $(srcdir)/C/figures/*.png))) # FIXME: probably have to shell escape to determine the file names _DOC_C_HTML = $(foreach f, \ $(shell xsltproc --xinclude \ --stringparam db.chunk.basename "$(DOC_MODULE)" \ $(_chunks) "C/$(DOC_MODULE).xml"), \ C/$(f).xhtml) ############################################################################### _DOC_POFILES = $(if $(DOC_MODULE)$(DOC_ID), \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(lc).po)) _DOC_MOFILES = $(patsubst %.po,%.mo,$(_DOC_POFILES)) _DOC_LC_MODULES = $(if $(DOC_MODULE), \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xml)) _DOC_LC_PAGES = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach page,$(_DOC_C_PAGES), \ $(lc)/$(notdir $(page)) )) _DOC_LC_INCLUDES = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach inc,$(_DOC_C_INCLUDES), \ $(lc)/$(notdir $(inc)) )) # FIXME: probably have to shell escape to determine the file names _DOC_LC_HTML = \ $(foreach lc,$(_DOC_REAL_LINGUAS),$(foreach doc,$(_DOC_C_HTML), \ $(lc)/$(notdir $(doc)) )) _DOC_LC_DOCS = \ $(_DOC_LC_MODULES) $(_DOC_LC_INCLUDES) $(_DOC_LC_PAGES) \ $(if $(filter html HTML,$(_DOC_REAL_FORMATS)),$(_DOC_LC_HTML)) _DOC_LC_FIGURES = $(foreach lc,$(_DOC_REAL_LINGUAS), \ $(patsubst C/%,$(lc)/%,$(_DOC_C_FIGURES)) ) _DOC_SRC_FIGURES = \ $(foreach fig,$(_DOC_C_FIGURES), $(foreach lc,C $(_DOC_REAL_LINGUAS), \ $(wildcard $(srcdir)/$(lc)/$(patsubst C/%,%,$(fig))) )) _DOC_POT = $(if $(DOC_MODULE),$(DOC_MODULE).pot,$(if $(DOC_ID),$(DOC_ID).pot)) ################################################################################ _DOC_HTML_ALL = $(if $(filter html HTML,$(_DOC_REAL_FORMATS)), \ $(_DOC_C_HTML) $(_DOC_LC_HTML)) _DOC_HTML_TOPS = $(foreach lc,C $(_DOC_REAL_LINGUAS),$(lc)/$(DOC_MODULE).xhtml) _clean_omf = $(if $(_DOC_OMF_IN),clean-doc-omf) _clean_dsk = $(if $(_DOC_DSK_IN),clean-doc-dsk) _clean_lc = $(if $(_DOC_REAL_LINGUAS),clean-doc-lc) _clean_dir = $(if $(DOC_MODULE)$(DOC_ID),clean-doc-dir) _doc_install_dir = $(if $(DOC_ID),$(DOC_ID),$(DOC_MODULE)) DOC_MODULE = gobby DOC_FIGURES = figures/main_window.png \ figures/preferences_editor.png \ figures/preferences_user.png \ figures/preferences_appearance.png \ figures/preferences_security.png \ figures/preferences_view.png DOC_LINGUAS = all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/gnome-doc-utils.make $(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) --foreign help/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign help/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_srcdir)/gnome-doc-utils.make: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-local pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-local \ dist-hook distclean distclean-generic distclean-local distdir \ dvi dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local 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 \ maintainer-clean-local mostlyclean mostlyclean-generic \ mostlyclean-local pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-local DOC_H_FILE ?= DOC_H_DOCS ?= $(DOC_H_FILE): $(DOC_H_DOCS); @rm -f $@.tmp; touch $@.tmp; echo 'const gchar* documentation_credits[] = {' >> $@.tmp list='$(DOC_H_DOCS)'; for doc in $$list; do \ xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ xsltproc --path "$$xmlpath" $(_credits) $$doc; \ done | sort | uniq \ | awk 'BEGIN{s=""}{n=split($$0,w,"<");if(s!=""&&s!=substr(w[1],1,length(w[1])-1)){print s};if(n>1){print $$0;s=""}else{s=$$0}};END{if(s!=""){print s}}' \ | sed -e 's/\\/\\\\/' -e 's/"/\\"/' -e 's/\(.*\)/\t"\1",/' >> $@.tmp echo ' NULL' >> $@.tmp echo '};' >> $@.tmp echo >> $@.tmp list='$(DOC_H_DOCS)'; for doc in $$list; do \ xmlpath="`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`:$(srcdir)/`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`"; \ if ! test -f "$$doc"; then doc="$(srcdir)/$$doc"; fi; \ docid=`echo "$$doc" | sed -e 's/.*\/\([^/]*\)\.xml/\1/' \ | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`; \ echo $$xmlpath; \ ids=`xsltproc --xinclude --path "$$xmlpath" $(_ids) $$doc`; \ for id in $$ids; do \ echo '#define HELP_'`echo $$docid`'_'`echo $$id \ | sed -e 's/[^a-zA-Z_]/_/g' | tr 'a-z' 'A-Z'`' "'$$id'"' >> $@.tmp; \ done; \ echo >> $@.tmp; \ done; cp $@.tmp $@ && rm -f $@.tmp dist-check-gdu: @HAVE_GNOME_DOC_UTILS_FALSE@ @echo "*** GNOME Doc Utils must be installed in order to make dist" @HAVE_GNOME_DOC_UTILS_FALSE@ @false .PHONY: dist-doc-header dist-doc-header: $(DOC_H_FILE) @if test -f "$(DOC_H_FILE)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $${d}$(DOC_H_FILE) $(distdir)/$(DOC_H_FILE)"; \ $(INSTALL_DATA) "$${d}$(DOC_H_FILE)" "$(distdir)/$(DOC_H_FILE)"; doc-dist-hook: dist-check-gdu $(if $(DOC_H_FILE),dist-doc-header) .PHONY: clean-doc-header clean-local: $(_clean_doc_header) distclean-local: $(_clean_doc_header) mostlyclean-local: $(_clean_doc_header) maintainer-clean-local: $(_clean_doc_header) clean-doc-header: rm -f $(DOC_H_FILE) all: $(DOC_H_FILE) ################################################################################ DOC_MODULE ?= DOC_ID ?= DOC_PAGES ?= DOC_ENTITIES ?= DOC_INCLUDES ?= DOC_FIGURES ?= DOC_FORMATS ?= docbook DOC_LINGUAS ?= ################################################################################ _xml2po ?= `which xml2po` _db2html ?= `$(PKG_CONFIG) --variable db2html gnome-doc-utils` _db2omf ?= `$(PKG_CONFIG) --variable db2omf gnome-doc-utils` _chunks ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/chunks.xsl _credits ?= `$(PKG_CONFIG) --variable xmldir gnome-doc-utils`/gnome/xslt/docbook/utils/credits.xsl _ids ?= $(shell $(PKG_CONFIG) --variable xmldir gnome-doc-utils)/gnome/xslt/docbook/utils/ids.xsl @ENABLE_SK_TRUE@_skpkgdatadir ?= `scrollkeeper-config --pkgdatadir` @ENABLE_SK_TRUE@_sklocalstatedir ?= `scrollkeeper-config --pkglocalstatedir` @ENABLE_SK_TRUE@_skcontentslist ?= $(_skpkgdatadir)/Templates/C/scrollkeeper_cl.xml $(_DOC_OMF_DB) : $(_DOC_OMF_IN) $(_DOC_OMF_DB) : $(DOC_MODULE)-%.omf : %/$(DOC_MODULE).xml @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ echo "The file '$(_skcontentslist)' does not exist." >&2; \ echo "Please check your ScrollKeeper installation." >&2; \ exit 1; } $(GDU_V_DB2OMF)xsltproc -o $@ $(call db2omf_args,$@,$<,'docbook') || { rm -f "$@"; exit 1; } $(_DOC_OMF_HTML) : $(_DOC_OMF_IN) $(_DOC_OMF_HTML) : $(DOC_MODULE)-html-%.omf : %/$(DOC_MODULE).xml @ENABLE_SK_TRUE@ @test "x$(_ENABLE_SK)" != "xtrue" -o -f "$(_skcontentslist)" || { \ @ENABLE_SK_TRUE@ echo "The file '$(_skcontentslist)' does not exist" >&2; \ @ENABLE_SK_TRUE@ echo "Please check your ScrollKeeper installation." >&2; \ @ENABLE_SK_TRUE@ exit 1; } $(GDU_V_DB2OMF)xsltproc -o $@ $(call db2omf_args,$@,$<,'xhtml') || { rm -f "$@"; exit 1; } .PHONY: omf omf: $(_DOC_OMF_ALL) .PHONY: po po: $(_DOC_POFILES) .PHONY: mo mo: $(_DOC_MOFILES) $(_DOC_POFILES): @if ! test -d $(dir $@); then \ echo "mkdir $(dir $@)"; \ mkdir "$(dir $@)"; \ fi @if test ! -f $@ -a -f $(srcdir)/$@; then \ echo "cp $(srcdir)/$@ $@"; \ cp "$(srcdir)/$@" "$@"; \ fi; @docs=; \ list='$(_DOC_C_DOCS_NOENT)'; for doc in $$list; do \ docs="$$docs $(_DOC_ABS_SRCDIR)/$$doc"; \ done; \ if ! test -f $@; then \ echo "(cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp)"; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e $$docs > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp); \ else \ echo "(cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs)"; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -u $(notdir $@) $$docs); \ fi $(_DOC_MOFILES): %.mo: %.po $(AM_V_at)if ! test -d $(dir $@); then mkdir "$(dir $@)"; fi $(GDU_V_MSGFMT)msgfmt -o $@ $< # FIXME: fix the dependancy # FIXME: hook xml2po up $(_DOC_LC_DOCS) : $(_DOC_MOFILES) $(_DOC_LC_DOCS) : $(_DOC_C_DOCS) $(AM_V_at)if ! test -d $(dir $@); then mkdir $(dir $@); fi $(GDU_V_XML2PO)if [ -f "C/$(notdir $@)" ]; then d="../"; else d="$(_DOC_ABS_SRCDIR)/"; fi; \ mo="$(dir $@)$(patsubst %/$(notdir $@),%,$@).mo"; \ if [ -f "$${mo}" ]; then mo="../$${mo}"; else mo="$(_DOC_ABS_SRCDIR)/$${mo}"; fi; \ (cd $(dir $@) && \ $(_xml2po) -m $(_xml2po_mode) -e -t "$${mo}" \ "$${d}C/$(notdir $@)" > $(notdir $@).tmp && \ cp $(notdir $@).tmp $(notdir $@) && rm -f $(notdir $@).tmp) .PHONY: pot pot: $(_DOC_POT) $(_DOC_POT): $(_DOC_C_DOCS_NOENT) $(GDU_V_XML2PO)$(_xml2po) -m $(_xml2po_mode) -e -o $@ $^ $(_DOC_HTML_TOPS): $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(GDU_V_DB2HTM)xsltproc -o $@ --xinclude --param db.chunk.chunk_top "false()" --stringparam db.chunk.basename "$(DOC_MODULE)" --stringparam db.chunk.extension ".xhtml" $(_db2html) $(patsubst %.xhtml,%.xml,$@) ################################################################################ all: \ $(_DOC_C_DOCS) $(_DOC_LC_DOCS) \ $(_DOC_OMF_ALL) $(_DOC_DSK_ALL) \ $(_DOC_HTML_ALL) $(_DOC_POFILES) ################################################################################ .PHONY: clean-doc-omf clean-doc-dsk clean-doc-lc clean-doc-dir clean-doc-omf: ; rm -f $(_DOC_OMF_DB) $(_DOC_OMF_HTML) clean-doc-dsk: ; rm -f $(_DOC_DSK_DB) $(_DOC_DSK_HTML) clean-doc-lc: rm -f $(_DOC_LC_DOCS) rm -f $(_DOC_MOFILES) @list='$(_DOC_POFILES)'; for po in $$list; do \ if ! test "$$po" -ef "$(srcdir)/$$po"; then \ echo "rm -f $$po"; \ rm -f "$$po"; \ fi; \ done # .xml2.po.mo cleaning is obsolete as of 0.18.1 and could be removed in 0.20.x @for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc/.xml2po.mo"; then \ echo "rm -f $$lc/.xml2po.mo"; \ rm -f "$$lc/.xml2po.mo"; \ fi; \ done clean-doc-dir: clean-doc-lc @for lc in C $(_DOC_REAL_LINGUAS); do \ for dir in `find $$lc -depth -type d`; do \ if ! test $$dir -ef $(srcdir)/$$dir; then \ echo "rmdir $$dir"; \ rmdir "$$dir"; \ fi; \ done; \ done clean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) distclean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) mostlyclean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) maintainer-clean-local: \ $(_clean_omf) $(_clean_dsk) \ $(_clean_lc) $(_clean_dir) ################################################################################ .PHONY: dist-doc-docs dist-doc-pages dist-doc-figs dist-doc-omf dist-doc-dsk doc-dist-hook: \ $(if $(DOC_MODULE)$(DOC_ID),dist-doc-docs) \ $(if $(_DOC_C_FIGURES),dist-doc-figs) \ $(if $(_DOC_OMF_IN),dist-doc-omf) # $(if $(_DOC_DSK_IN),dist-doc-dsk) dist-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) $(_DOC_POFILES) @for lc in C $(_DOC_REAL_LINGUAS); do \ echo " $(mkinstalldirs) $(distdir)/$$lc"; \ $(mkinstalldirs) "$(distdir)/$$lc"; \ done @list='$(_DOC_C_DOCS)'; \ for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$docdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ $(mkinstalldirs) "$(distdir)/$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ done @list='$(_DOC_LC_DOCS)'; \ for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$docdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ $(mkinstalldirs) "$(distdir)/$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ done @list='$(_DOC_POFILES)'; \ for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir=`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$docdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$docdir"; \ $(mkinstalldirs) "$(distdir)/$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(distdir)/$$doc"; \ $(INSTALL_DATA) "$$d$$doc" "$(distdir)/$$doc"; \ done dist-doc-figs: $(_DOC_SRC_FIGURES) @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; \ for fig in $$list; do \ if test -f "$$fig"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$fig"; then \ figdir=`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ if ! test -d "$(distdir)/$$figdir"; then \ echo "$(mkinstalldirs) $(distdir)/$$figdir"; \ $(mkinstalldirs) "$(distdir)/$$figdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$fig $(distdir)/$$fig"; \ $(INSTALL_DATA) "$$d$$fig" "$(distdir)/$$fig"; \ fi; \ done; dist-doc-omf: @if test -f "$(_DOC_OMF_IN)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $$d$(_DOC_OMF_IN) $(distdir)/$(notdir $(_DOC_OMF_IN))"; \ $(INSTALL_DATA) "$$d$(_DOC_OMF_IN)" "$(distdir)/$(notdir $(_DOC_OMF_IN))" dist-doc-dsk: @if test -f "$(_DOC_DSK_IN)"; then d=; else d="$(srcdir)/"; fi; \ echo "$(INSTALL_DATA) $$d$(_DOC_DSK_IN) $(distdir)/$(notdir $(_DOC_DSK_IN))"; \ $(INSTALL_DATA) "$$d$(_DOC_DSK_IN)" "$(distdir)/$(notdir $(_DOC_DSK_IN))" ################################################################################ .PHONY: check-doc-docs check-doc-omf check: \ $(if $(DOC_MODULE),check-doc-docs) \ $(if $(DOC_ID),check-doc-pages) \ $(if $(_DOC_OMF_IN),check-doc-omf) check-doc-docs: $(_DOC_C_DOCS) $(_DOC_LC_DOCS) @for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc"; \ then d=; \ xmlpath="$$lc"; \ else \ d="$(srcdir)/"; \ xmlpath="$$lc:$(srcdir)/$$lc"; \ fi; \ echo "xmllint --noout --noent --path $$xmlpath --xinclude --postvalid $$d$$lc/$(DOC_MODULE).xml"; \ xmllint --noout --noent --path "$$xmlpath" --xinclude --postvalid "$$d$$lc/$(DOC_MODULE).xml"; \ done check-doc-pages: $(_DOC_C_PAGES) $(_DOC_LC_PAGES) for lc in C $(_DOC_REAL_LINGUAS); do \ if test -f "$$lc"; \ then d=; \ xmlpath="$$lc"; \ else \ d="$(srcdir)/"; \ xmlpath="$$lc:$(srcdir)/$$lc"; \ fi; \ for page in $(DOC_PAGES); do \ echo "xmllint --noout --noent --path $$xmlpath --xinclude $$d$$lc/$$page"; \ xmllint --noout --noent --path "$$xmlpath" --xinclude "$$d$$lc/$$page"; \ done; \ done check-doc-omf: $(_DOC_OMF_ALL) @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ echo "xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf"; \ xmllint --noout --xinclude --dtdvalid 'http://scrollkeeper.sourceforge.net/dtds/scrollkeeper-omf-1.0/scrollkeeper-omf.dtd' $$omf; \ done ################################################################################ .PHONY: install-doc-docs install-doc-html install-doc-figs install-doc-omf install-doc-dsk install-data-local: \ $(if $(DOC_MODULE)$(DOC_ID),install-doc-docs) \ $(if $(_DOC_HTML_ALL),install-doc-html) \ $(if $(_DOC_C_FIGURES),install-doc-figs) \ $(if $(_DOC_OMF_IN),install-doc-omf) # $(if $(_DOC_DSK_IN),install-doc-dsk) install-doc-docs: @for lc in C $(_DOC_REAL_LINGUAS); do \ echo "$(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc"; \ $(mkinstalldirs) $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$lc; \ done @list='$(_DOC_C_DOCS)'; for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \ if ! test -d "$$docdir"; then \ echo "$(mkinstalldirs) $$docdir"; \ $(mkinstalldirs) "$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \ done @list='$(_DOC_LC_DOCS)'; for doc in $$list; do \ if test -f "$$doc"; then d=; else d="$(srcdir)/"; fi; \ docdir="$$lc/"`echo $$doc | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ docdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$docdir"; \ if ! test -d "$$docdir"; then \ echo "$(mkinstalldirs) $$docdir"; \ $(mkinstalldirs) "$$docdir"; \ fi; \ echo "$(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ $(INSTALL_DATA) $$d$$doc $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc; \ done install-doc-figs: @list='$(patsubst C/%,%,$(_DOC_C_FIGURES))'; for fig in $$list; do \ for lc in C $(_DOC_REAL_LINGUAS); do \ figsymlink=false; \ if test -f "$$lc/$$fig"; then \ figfile="$$lc/$$fig"; \ elif test -f "$(srcdir)/$$lc/$$fig"; then \ figfile="$(srcdir)/$$lc/$$fig"; \ else \ figsymlink=true; \ fi; \ figdir="$$lc/"`echo $$fig | sed -e 's/^\(.*\/\).*/\1/' -e '/\//!s/.*//'`; \ figdir="$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$figdir"; \ if ! test -d "$$figdir"; then \ echo "$(mkinstalldirs) $$figdir"; \ $(mkinstalldirs) "$$figdir"; \ fi; \ figbase=`echo $$fig | sed -e 's/^.*\///'`; \ if $$figsymlink; then \ echo "cd $$figdir && $(LN_S) -f ../../C/$$fig $$figbase"; \ ( cd "$$figdir" && $(LN_S) -f "../../C/$$fig" "$$figbase" ); \ else \ echo "$(INSTALL_DATA) $$figfile $$figdir$$figbase"; \ $(INSTALL_DATA) "$$figfile" "$$figdir$$figbase"; \ fi; \ done; \ done install-doc-html: echo install-html install-doc-omf: $(mkinstalldirs) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir) @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ echo "$(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ $(INSTALL_DATA) $$omf $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf; \ done @if test "x$(_ENABLE_SK)" = "xtrue"; then \ echo "scrollkeeper-update -p $(DESTDIR)$(_sklocalstatedir) -o $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ scrollkeeper-update -p "$(DESTDIR)$(_sklocalstatedir)" -o "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)"; \ fi; install-doc-dsk: echo install-dsk ################################################################################ .PHONY: uninstall-doc-docs uninstall-doc-html uninstall-doc-figs uninstall-doc-omf uninstall-doc-dsk uninstall-local: \ $(if $(DOC_MODULE)$(DOC_ID),uninstall-doc-docs) \ $(if $(_DOC_HTML_ALL),uninstall-doc-html) \ $(if $(_DOC_C_FIGURES),uninstall-doc-figs) \ $(if $(_DOC_OMF_IN),uninstall-doc-omf) # $(if $(_DOC_DSK_IN),uninstall-doc-dsk) uninstall-doc-docs: @list='$(_DOC_C_DOCS)'; for doc in $$list; do \ echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ done @list='$(_DOC_LC_DOCS)'; for doc in $$list; do \ echo " rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$doc"; \ done uninstall-doc-figs: @list='$(_DOC_C_FIGURES) $(_DOC_LC_FIGURES)'; for fig in $$list; do \ echo "rm -f $(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ rm -f "$(DESTDIR)$(HELP_DIR)/$(_doc_install_dir)/$$fig"; \ done; uninstall-doc-omf: @list='$(_DOC_OMF_ALL)'; for omf in $$list; do \ if test "x$(_ENABLE_SK)" = "xtrue"; then \ echo "scrollkeeper-uninstall -p $(_sklocalstatedir) $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ scrollkeeper-uninstall -p "$(_sklocalstatedir)" "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ fi; \ echo "rm -f $(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ rm -f "$(DESTDIR)$(OMF_DIR)/$(_doc_install_dir)/$$omf"; \ done dist-hook: doc-dist-hook # 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: gobby-0.5.0/help/Makefile.am0000644000175000017500000000054612364474462012544 00000000000000include $(top_srcdir)/gnome-doc-utils.make dist-hook: doc-dist-hook DOC_MODULE = gobby DOC_FIGURES = figures/main_window.png \ figures/preferences_editor.png \ figures/preferences_user.png \ figures/preferences_appearance.png \ figures/preferences_security.png \ figures/preferences_view.png DOC_LINGUAS = gobby-0.5.0/help/gobby.omf.in0000644000175000017500000000041312376162134012704 00000000000000 manual gobby-0.5.0/ChangeLog0000644000175000017500000075216112376162130011326 00000000000000commit 58aaa15f12da6be896d89230bb8d21e9bd51e533 Author: Armin Burgmeier Date: Sat Aug 23 14:57:36 2014 -0400 Release Gobby 0.5.0 NEWS | 13 +++++++++++++ configure.ac | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) commit 04185b75a3780dc5188c5ed622536ba912237978 Author: Armin Burgmeier Date: Sat Aug 23 14:56:48 2014 -0400 Add the appdata file to the distribution Makefile.am | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit eed2e97f7a87677732f13acbdd3b0a6a5438d1c0 Author: Armin Burgmeier Date: Sat Aug 23 14:06:51 2014 -0400 Update translations for 0.5.0 release po/ca.po | 680 ++++++++++++++++++++++++++++-------------------------- po/de.po | 688 +++++++++++++++++++++++++++++-------------------------- po/el_GR.po | 687 ++++++++++++++++++++++++++++-------------------------- po/en_GB.po | 685 ++++++++++++++++++++++++++++-------------------------- po/fr.po | 686 ++++++++++++++++++++++++++++-------------------------- po/gobby05.pot | 635 +++++++++++++++++++++++++------------------------- po/ja.po | 685 ++++++++++++++++++++++++++++-------------------------- po/pt_BR.po | 640 ++++++++++++++++++++++++++------------------------- po/zh_TW.po | 679 ++++++++++++++++++++++++++++-------------------------- 9 files changed, 3124 insertions(+), 2941 deletions(-) commit 667627d48b515c63fd003b31744afda86d1575fd Author: Armin Burgmeier Date: Fri Aug 22 11:36:36 2014 -0400 Avoid unnecessary preferences update on GtkFileChooserButton initialization code/dialogs/preferences-dialog.hpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) commit c3a097eaf43b2db995ca345577de9214794ac5e3 Author: Armin Burgmeier Date: Fri Aug 22 11:36:27 2014 -0400 Leave some space between statusbar icon and text code/core/statusbar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f600761fc97b3028476f2970012b73c817354393 Author: Armin Burgmeier Date: Fri Aug 22 11:34:52 2014 -0400 Don't show the same statusbar message more than once code/core/statusbar.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) commit 399c9e27ebab04718da1220c7dc4eeb12d8c16db Author: Armin Burgmeier Date: Tue Aug 19 23:04:14 2014 -0400 Replace name resolver by the one in libinfinity This way we also support SRV records. code/core/browser.cpp | 48 ++++++- code/core/browser.hpp | 7 +- code/core/connectionmanager.cpp | 179 ++++++++++++++++++------- code/core/connectionmanager.hpp | 50 +++++-- code/operations/operation-subscribe-path.cpp | 154 +++++++++------------ code/operations/operation-subscribe-path.hpp | 19 ++- code/util/Makefile.am | 2 - code/util/resolv.cpp | 152 --------------------- code/util/resolv.hpp | 47 ------- 9 files changed, 288 insertions(+), 370 deletions(-) commit e03b694c82277f8afdafbadebb6c496d64575856 Author: Armin Burgmeier Date: Sun Aug 17 22:28:01 2014 -0400 Don't show "Create Account" option for local servers Local servers do not support creating an account anyway, and since the 0 account ID is used to check the permission, taking away the permission for all ACL sheets is not detected. code/commands/browser-context-commands.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) commit fc1ae99cb083f45cc8dbe1e0948558d085e2a476 Author: Armin Burgmeier Date: Wed Aug 13 22:02:39 2014 -0400 Adapt to recent InfAclAccount API changes in libinfinity code/commands/browser-context-commands.cpp | 11 +++++++---- code/core/userjoin.cpp | 4 +++- 2 files changed, 10 insertions(+), 5 deletions(-) commit 10afee1813bbebc03c8b5acba61dbba862d620a1 Author: Armin Burgmeier Date: Sun Aug 10 22:32:37 2014 -0400 Add a TODO item about using gsettings for preferences TODO | 1 + 1 file changed, 1 insertion(+) commit 31d38ac02d4ee4f727c1d5b86e594c1078a949c4 Author: Armin Burgmeier Date: Sat Aug 9 23:30:10 2014 -0400 Update some links in the help file help/C/gobby.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit 662f59dad8bde6f091ebd239b89fd5fa0ec97792 Author: Armin Burgmeier Date: Thu Aug 7 22:46:46 2014 -0400 Small README.md updates README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) commit f578497e895b1005b09c4b7e5c301f4b45d15453 Author: Armin Burgmeier Date: Thu Aug 7 15:25:25 2014 -0400 Add support for local chat notes code/core/browser.cpp | 1 + code/core/noteplugin.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++- code/core/noteplugin.hpp | 1 + 3 files changed, 60 insertions(+), 1 deletion(-) commit 62109968f3b64e4a203d3ee650d7f4ccd2fe4de6 Author: Armin Burgmeier Date: Thu Aug 7 13:30:36 2014 -0400 Prevent session closure of local documents when opening preferences dialog The reason for the problem was that the "selection-changed" signal of GtkFileChooserButton is first emitted with the home directory and then again with the actual initial value. This caused the storage of the InfdDirectory to be reset temporarily. In principle, this can be fixed by using the "file-set" signal instead. However, a signal emission is missing when selecting an entry from the combo box instead of the file dialog. This was only fixed in GTK+ 3.10 or later. Therefore, a workaround is implemented which uses the "selection-changed" signal but ignores it until it was first emitted with the initial value. code/dialogs/preferences-dialog.cpp | 25 ++++---------------- code/dialogs/preferences-dialog.hpp | 43 ++++++++++++++++++++++++++++++++--- 2 files changed, 44 insertions(+), 24 deletions(-) commit 048a4f220aaaba34c23d7206fe94e48f67c1e55c Author: Armin Burgmeier Date: Thu Aug 7 10:48:02 2014 -0400 TextTabLabel: Make sure the modification character is always available Otherwise m_dot_char remains '\0' when on_style_updated() is not called since the widget is created, truncating the generated markup and provoking a warning message. code/core/texttablabel.cpp | 54 ++++++++++++++++++++++++-------------------- code/core/texttablabel.hpp | 1 + 2 files changed, 31 insertions(+), 24 deletions(-) commit 6c4ccbf50bf679b6bc1590bac67d3af0b1525f51 Author: Armin Burgmeier Date: Thu Aug 7 10:37:19 2014 -0400 Fix a crash when subscribing to a local document that has remote subscriptions This crash is strange since it happens in gtk_source_buffer_set_style_scheme() when the TextSessionView object is created. There is one subtle difference to the other two cases: * Subscribing to a remote document * Subscribing to a local document that has no remote subscriptions which is that the GtkSourceBuffer is newly created; while if there are remote subscriptions, then the buffer exists already and the style scheme is set on a buffer that is already in use for a while. Now, I don't see why this would produce a crash. I have moved the setting of the style scheme further up, before the buffer is connected to the GtkSourceView, and the problem seems to be gone. However, I suspect a deeper problem down in GTK+ somewhere... code/core/textsessionview.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) commit 0322bb70fabbf4429aa774114d5a8bedd246e2b2 Author: Armin Burgmeier Date: Thu Aug 7 09:55:22 2014 -0400 Hide local chat when only the local user has joined code/commands/browser-commands.cpp | 305 +++++++++++++++++++++---- code/commands/browser-commands.hpp | 7 +- code/commands/user-join-commands.cpp | 35 ++- code/commands/user-join-commands.hpp | 3 +- code/core/foldermanager.cpp | 12 +- code/core/foldermanager.hpp | 8 +- code/operations/operation-new.cpp | 2 +- code/operations/operation-open.cpp | 2 +- code/operations/operation-subscribe-path.cpp | 5 +- code/window.cpp | 2 +- 10 files changed, 312 insertions(+), 69 deletions(-) commit 5f9ab02e2986f93a4b630d01708b7441dcdff3ad Author: Armin Burgmeier Date: Wed Aug 6 18:46:25 2014 -0400 Split the userjoin code into two classes The class in core/ is responsible for joining a user into a session and keeping track of the request, while the class in commands/ is responsible for triggering it at the right time and the user interface. code/commands/user-join-commands.cpp | 446 +++++++++++---------------------- code/commands/user-join-commands.hpp | 6 + code/core/Makefile.am | 2 + code/core/userjoin.cpp | 248 ++++++++++++++++++ code/core/userjoin.hpp | 110 ++++++++ 5 files changed, 511 insertions(+), 301 deletions(-) commit 7ef6c4783e399134c7576aa55e46cb5f21da359c Author: Armin Burgmeier Date: Wed Aug 6 14:03:02 2014 -0400 Add fullscreen option This allows to make the window fullscreen. By default all the clutter (additional bars and frames) are removed, but they can be activated again in the fullscreen mode. code/commands/view-commands.cpp | 108 ++++++++++++++++++++++++++++++++++++-- code/commands/view-commands.hpp | 12 +++-- code/core/header.cpp | 9 ++++ code/core/header.hpp | 1 + code/main.cpp | 45 +++++++++------- code/window.cpp | 2 +- 6 files changed, 149 insertions(+), 28 deletions(-) commit 2d7ec3af79cdbb7cbffa770c0f08054b9865b95f Author: Armin Burgmeier Date: Mon Aug 4 22:43:54 2014 -0400 Change the license of Gobby from GPL to ISC All contributors agreed to the license change: * Philipp Kern * Benjamin Herr * Gabríel Arthúr Pétursson AUTHORS | 24 +- COPYING | 352 +--------------------- README.md | 24 +- code/commands/auth-commands.cpp | 23 +- code/commands/auth-commands.hpp | 23 +- code/commands/autosave-commands.cpp | 23 +- code/commands/autosave-commands.hpp | 23 +- code/commands/browser-commands.cpp | 23 +- code/commands/browser-commands.hpp | 23 +- code/commands/browser-context-commands.cpp | 23 +- code/commands/browser-context-commands.hpp | 23 +- code/commands/edit-commands.cpp | 23 +- code/commands/edit-commands.hpp | 23 +- code/commands/file-commands.cpp | 25 +- code/commands/file-commands.hpp | 25 +- code/commands/file-tasks/task-export-html.cpp | 23 +- code/commands/file-tasks/task-export-html.hpp | 23 +- code/commands/file-tasks/task-new.cpp | 23 +- code/commands/file-tasks/task-new.hpp | 23 +- code/commands/file-tasks/task-open-file.cpp | 23 +- code/commands/file-tasks/task-open-file.hpp | 23 +- code/commands/file-tasks/task-open-location.cpp | 23 +- code/commands/file-tasks/task-open-location.hpp | 23 +- code/commands/file-tasks/task-open-multiple.cpp | 23 +- code/commands/file-tasks/task-open-multiple.hpp | 23 +- code/commands/file-tasks/task-open.cpp | 23 +- code/commands/file-tasks/task-open.hpp | 23 +- code/commands/file-tasks/task-save-all.cpp | 23 +- code/commands/file-tasks/task-save-all.hpp | 23 +- code/commands/file-tasks/task-save.cpp | 23 +- code/commands/file-tasks/task-save.hpp | 23 +- code/commands/folder-commands.cpp | 23 +- code/commands/folder-commands.hpp | 23 +- code/commands/help-commands.cpp | 57 ++-- code/commands/help-commands.hpp | 23 +- code/commands/subscription-commands.cpp | 23 +- code/commands/subscription-commands.hpp | 23 +- code/commands/synchronization-commands.cpp | 23 +- code/commands/synchronization-commands.hpp | 23 +- code/commands/user-join-commands.cpp | 23 +- code/commands/user-join-commands.hpp | 23 +- code/commands/view-commands.cpp | 23 +- code/commands/view-commands.hpp | 23 +- code/core/browser.cpp | 23 +- code/core/browser.hpp | 23 +- code/core/certificatemanager.cpp | 23 +- code/core/certificatemanager.hpp | 23 +- code/core/chatsessionview.cpp | 23 +- code/core/chatsessionview.hpp | 23 +- code/core/chattablabel.cpp | 23 +- code/core/chattablabel.hpp | 23 +- code/core/closableframe.cpp | 23 +- code/core/closableframe.hpp | 23 +- code/core/connectionmanager.cpp | 23 +- code/core/connectionmanager.hpp | 23 +- code/core/credentialsgenerator.cpp | 23 +- code/core/credentialsgenerator.hpp | 23 +- code/core/documentinfostorage.cpp | 23 +- code/core/documentinfostorage.hpp | 23 +- code/core/filechooser.cpp | 23 +- code/core/filechooser.hpp | 23 +- code/core/folder.cpp | 23 +- code/core/folder.hpp | 23 +- code/core/foldermanager.cpp | 23 +- code/core/foldermanager.hpp | 23 +- code/core/header.cpp | 25 +- code/core/header.hpp | 25 +- code/core/huebutton.cpp | 23 +- code/core/huebutton.hpp | 23 +- code/core/iconmanager.cpp | 23 +- code/core/iconmanager.hpp | 23 +- code/core/nodewatch.cpp | 23 +- code/core/nodewatch.hpp | 23 +- code/core/noteplugin.cpp | 23 +- code/core/noteplugin.hpp | 23 +- code/core/preferences.cpp | 23 +- code/core/preferences.hpp | 23 +- code/core/selfhoster.cpp | 23 +- code/core/selfhoster.hpp | 23 +- code/core/server.cpp | 23 +- code/core/server.hpp | 23 +- code/core/sessionuserview.cpp | 23 +- code/core/sessionuserview.hpp | 23 +- code/core/sessionview.cpp | 23 +- code/core/sessionview.hpp | 23 +- code/core/statusbar.cpp | 23 +- code/core/statusbar.hpp | 23 +- code/core/tablabel.cpp | 23 +- code/core/tablabel.hpp | 23 +- code/core/textsessionuserview.cpp | 23 +- code/core/textsessionuserview.hpp | 23 +- code/core/textsessionview.cpp | 23 +- code/core/textsessionview.hpp | 23 +- code/core/texttablabel.cpp | 23 +- code/core/texttablabel.hpp | 23 +- code/core/textundogrouping.cpp | 23 +- code/core/textundogrouping.hpp | 23 +- code/core/titlebar.cpp | 23 +- code/core/titlebar.hpp | 23 +- code/core/userlist.cpp | 23 +- code/core/userlist.hpp | 23 +- code/dialogs/connection-dialog.cpp | 23 +- code/dialogs/connection-dialog.hpp | 23 +- code/dialogs/document-location-dialog.cpp | 23 +- code/dialogs/document-location-dialog.hpp | 23 +- code/dialogs/entry-dialog.cpp | 23 +- code/dialogs/entry-dialog.hpp | 23 +- code/dialogs/find-dialog.cpp | 23 +- code/dialogs/find-dialog.hpp | 23 +- code/dialogs/goto-dialog.cpp | 23 +- code/dialogs/goto-dialog.hpp | 23 +- code/dialogs/initial-dialog.cpp | 23 +- code/dialogs/initial-dialog.hpp | 23 +- code/dialogs/open-location-dialog.cpp | 23 +- code/dialogs/open-location-dialog.hpp | 23 +- code/dialogs/password-dialog.cpp | 23 +- code/dialogs/password-dialog.hpp | 23 +- code/dialogs/preferences-dialog.cpp | 23 +- code/dialogs/preferences-dialog.hpp | 23 +- code/main.cpp | 23 +- code/operations/operation-delete.cpp | 23 +- code/operations/operation-delete.hpp | 23 +- code/operations/operation-export-html.cpp | 23 +- code/operations/operation-export-html.hpp | 23 +- code/operations/operation-new.cpp | 23 +- code/operations/operation-new.hpp | 23 +- code/operations/operation-open-multiple.cpp | 23 +- code/operations/operation-open-multiple.hpp | 23 +- code/operations/operation-open.cpp | 23 +- code/operations/operation-open.hpp | 23 +- code/operations/operation-save.cpp | 23 +- code/operations/operation-save.hpp | 23 +- code/operations/operation-subscribe-path.cpp | 23 +- code/operations/operation-subscribe-path.hpp | 23 +- code/operations/operations.cpp | 23 +- code/operations/operations.hpp | 23 +- code/util/asyncoperation.cpp | 23 +- code/util/asyncoperation.hpp | 23 +- code/util/closebutton.cpp | 23 +- code/util/closebutton.hpp | 23 +- code/util/color.cpp | 23 +- code/util/color.hpp | 23 +- code/util/config.cpp | 23 +- code/util/config.hpp | 23 +- code/util/defaultaccumulator.hpp | 23 +- code/util/file.cpp | 23 +- code/util/file.hpp | 23 +- code/util/groupframe.cpp | 23 +- code/util/groupframe.hpp | 23 +- code/util/gtk-compat.hpp | 23 +- code/util/historyentry.cpp | 23 +- code/util/historyentry.hpp | 23 +- code/util/i18n.cpp | 23 +- code/util/i18n.hpp | 23 +- code/util/resolv.cpp | 23 +- code/util/resolv.hpp | 23 +- code/util/serialize.cpp | 23 +- code/util/serialize.hpp | 23 +- code/util/uri.cpp | 23 +- code/util/uri.hpp | 23 +- code/window.cpp | 23 +- code/window.hpp | 23 +- help/C/gobby.xml | 9 +- help/gobby.omf.in | 2 +- 164 files changed, 1655 insertions(+), 2455 deletions(-) commit 23909f98e75491f206acc2368ecaf2311f5e8004 Author: Armin Burgmeier Date: Mon Aug 4 22:26:08 2014 -0400 Update README.md and remove outdated HACKING file HACKING | 10 ---------- README.md | 11 +++++------ 2 files changed, 5 insertions(+), 16 deletions(-) commit a32edc7f39eec4aab42132b1d999a289c2debb31 Author: Philipp Kern Date: Sun Jul 27 22:51:56 2014 +0200 Initial conversion of README to Markdown. Convert README to Markdown for better visibility on GitHub's repository viewer. Not all content has been updated to reflect reality yet (especially with relation to GitHub), but dependencies have been adjusted, pull requests are mentioned and Travis CI status is displayed. README | 136 --------------------------------------------------------- README.md | 114 +++++++++++++++++++++++++++++++++++++++++++++++ configure.ac | 2 +- 3 files changed, 115 insertions(+), 137 deletions(-) commit 9a23b8590ce8edd73bf55f6b9e6173c9893149df Author: Philipp Kern Date: Sun Jul 27 22:24:51 2014 +0200 Travis CI: gtk-doc-tools needs to be present even if unused .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit aec24f929a4ed00961fe6a96b8e6c3f9294321a7 Author: Philipp Kern Date: Sun Jul 27 22:22:58 2014 +0200 Add Travis CI configuration. libinfinity needs to be built from master first, as gobby's HEAD can require features that are not yet found in the Debian packages. This also means that gobby's build state depends on libinfinity's because there is no easy way to fetch the last green build of another build from within Travis CI. .travis.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit de7e1f0d9e7e8380217b924cd6148569e76147d7 Author: Armin Burgmeier Date: Mon Jul 21 17:26:40 2014 +0200 Add Ctrl++ and Ctrl+- shortcuts to increase or decrease font size code/commands/view-commands.cpp | 23 ++++++++++++++++++++++ code/commands/view-commands.hpp | 3 ++- code/core/header.cpp | 18 ++++++++++++++++++ code/core/header.hpp | 2 ++ code/dialogs/preferences-dialog.cpp | 27 +++----------------------- code/dialogs/preferences-dialog.hpp | 36 +++++++++++++++++++++++++++++++++++ 6 files changed, 84 insertions(+), 25 deletions(-) commit 294d4eca95a2dce711b42154e269dc9ae05fe3fb Author: Armin Burgmeier Date: Thu Jul 17 15:02:54 2014 +0200 Show text beside icons when GTK_TOOLBAR_STYLE_BOTH_HORIZ is chosen (github #1) code/core/header.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) commit 1cead9bcfd7549fbd089fb9371f1640cfe364171 Author: Armin Burgmeier Date: Thu Jul 17 14:41:28 2014 +0200 Store an additional newline at the end of the document when saving (github #3) Also, when opening a file, don't load the trailing newline if there is one. The behavior is now equivalent to gedit's. code/operations/operation-open.cpp | 13 +++++++++++++ code/operations/operation-save.cpp | 16 +++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-) commit ac16fa465c2b2d28be8b86d9241497b26bd3fe1f Author: Armin Burgmeier Date: Wed Jul 16 16:39:26 2014 +0200 Pick up changed certificate credentials for existing connections The credentials change will become effective after disconnecting + reconnecting. code/core/connectionmanager.cpp | 75 ++++++++++++++++++++++++++++++++++++--- code/core/connectionmanager.hpp | 32 +++++++++++++++++ 2 files changed, 102 insertions(+), 5 deletions(-) commit 61290efd342c40dfa18030fa3a0264cb40600c29 Author: Armin Burgmeier Date: Mon Jul 14 18:44:54 2014 +0200 Make sure statusbar is initialized for all objects higher up the stack code/window.cpp | 6 +++--- code/window.hpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) commit c6d3cc7099bcb8d9af6371ae43aa2432e56f7e43 Author: Armin Burgmeier Date: Sun Jul 13 16:55:20 2014 +0200 Adapt to changed InfTextFilesystemFormat API code/core/noteplugin.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) commit d85ebeef6bc173c1a643589be8fcca0211231bbf Author: Armin Burgmeier Date: Sat Jul 12 21:13:14 2014 +0200 Update translation templates and po files po/POTFILES.in | 5 + po/ca.po | 2182 +++++++++++++++++++++++++++++++++++++----------------- po/de.po | 815 ++++++++++++++------ po/el_GR.po | 816 ++++++++++++++------ po/en_GB.po | 814 ++++++++++++++------ po/fr.po | 804 +++++++++++++------- po/gobby05.pot | 760 +++++++++++++------ po/ja.po | 814 ++++++++++++++------ po/pt_BR.po | 834 ++++++++++++++------- po/zh_TW.po | 904 +++++++++++++++------- 10 files changed, 6133 insertions(+), 2615 deletions(-) commit 52d473aa61538acaa40d68afc088da09dfaa1a5f Author: vitorlobo Date: Fri Jul 11 12:06:30 2014 -0300 pt_BR translated po/LINGUAS | 1 + po/pt_BR.po | 944 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 945 insertions(+) commit 8bdeea8323357034ca529de3278647674ac9e074 Author: Armin Burgmeier Date: Sat Jul 5 23:04:57 2014 +0200 Add account creation dialog This adds a UI for creating a new account at the server. This creates a client certificate which can be used to login to the new account. At the moment, this requires re-connection to the server. code/commands/browser-context-commands.cpp | 275 +++++++++++++++++++++++++-- code/commands/browser-context-commands.hpp | 27 ++- code/window.cpp | 5 +- 3 files changed, 291 insertions(+), 16 deletions(-) commit cb75957ffd8601abc94c42f329e78e1632996899 Author: Armin Burgmeier Date: Wed Jul 2 22:23:10 2014 +0200 Fix a crash when subscription fails in OperationSubscribePath code/operations/operation-subscribe-path.cpp | 6 +++--- code/operations/operation-subscribe-path.hpp | 8 ++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) commit b14cc8db839782d5075d89bdbc6522dc5e25f32b Merge: d3b99d2 e51352c Author: Armin Burgmeier Date: Mon Jun 30 20:20:39 2014 +0200 Merge commit 'e51352ce1b080dcacc3945de64dc0b34c7e9ffef' Conflicts: code/core/browser.cpp commit e51352ce1b080dcacc3945de64dc0b34c7e9ffef Author: Gabríel Arthúr Pétursson Date: Mon Jun 23 13:06:27 2014 +0000 Ability to remove disconnected servers from the document browser code/commands/browser-context-commands.cpp | 30 ++++++++++++++++++++++++++++ code/commands/browser-context-commands.hpp | 1 + code/core/browser.cpp | 11 ++++++++++ code/core/browser.hpp | 1 + code/core/connectionmanager.cpp | 6 ++++++ code/core/connectionmanager.hpp | 2 ++ 6 files changed, 51 insertions(+) commit fe7387ad98f82984ab7eb6792fc25e3a3a1b964c Author: Gabríel Arthúr Pétursson Date: Mon Jun 23 05:29:30 2014 +0000 Split Browser::get_selected into _browser and _iter variants code/commands/browser-context-commands.cpp | 5 ++++- code/core/browser.cpp | 24 ++++++++++++++++++------ code/core/browser.hpp | 3 ++- 3 files changed, 24 insertions(+), 8 deletions(-) commit d3b99d2a3cf213b7c96ca4e3235af8ec54a3761c Author: Armin Burgmeier Date: Mon Jun 30 12:27:00 2014 +0200 Fix memory leak in Browser::get_selected() code/core/browser.cpp | 3 +++ 1 file changed, 3 insertions(+) commit 0b1ce8e55e37502e15bcf2207c3d5e582400597d Author: Gabríel Arthúr Pétursson Date: Sun Jun 22 12:10:37 2014 +0000 Browser::get_selected incorrectly returns true on failure code/commands/browser-context-commands.cpp | 5 ----- code/core/browser.cpp | 2 +- 2 files changed, 1 insertion(+), 6 deletions(-) commit 3c48c84d06a2b8d95d7d90eb96891b5cdf681873 Author: Gabríel Arthúr Pétursson Date: Thu Jun 12 23:00:41 2014 +0000 Wrong property was loaded for the show_remote_cursors preference code/core/preferences.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f2432321bcc2cf1881c9d2b5b4e8dc20edfaab01 Author: Gabríel Arthúr Pétursson Date: Thu Jun 12 19:31:02 2014 +0000 Smart home/end toggles between the start/end of the line and the first/last character code/core/textsessionview.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit 72a8df0652232da57e0532f7202d81f53784fd34 Author: Armin Burgmeier Date: Thu May 15 18:05:39 2014 +0200 Remove unused variable code/commands/browser-context-commands.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) commit 27416b66568a07b424dd3c958bc0c332b5dfa5d7 Author: Armin Burgmeier Date: Thu May 15 18:03:55 2014 +0200 Server: Always set security policy to no-tls if no credentials are given code/core/server.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) commit ff6fb2a59dc5730adfcf5d9e1a0be32d16739417 Author: Armin Burgmeier Date: Sun May 4 13:54:19 2014 +0200 Adapt to API changes in inf-cert-util code/core/certificatemanager.cpp | 4 ++-- code/core/credentialsgenerator.cpp | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) commit c82bb97df895053c256f6c1f3171a7db0f1f2bea Author: Armin Burgmeier Date: Sun Apr 27 22:35:21 2014 +0200 Fix ancestor check in NodeWatch code/core/nodewatch.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 6be6c634efbae465f9c981a49edf1068a6fc19e7 Author: Jérôme Carretero Date: Tue Apr 22 09:35:34 2014 +0200 Fix include of a non-existing file libinfinity/client/infc-explore-request.h does no longer exist, since the InfRequestResult transition. code/core/documentinfostorage.cpp | 2 -- 1 file changed, 2 deletions(-) commit 7e89ed566c83011134cc5402f1936c379ade6d21 Author: Philipp Kern Date: Sun Apr 13 16:53:22 2014 +0200 Fix compilation with GtkSourceView 3.8. Patch by Andreas Henriksson ; Debian bug #718524 code/core/textsessionview.cpp | 2 ++ 1 file changed, 2 insertions(+) commit ebee76ac74427aaac0c044c1301524df8a2e2239 Author: Philipp Kern Date: Sun Apr 13 16:51:01 2014 +0200 Add missing include to fix compilation with recent toolchains. Patch by Daniel T Chen ; Debian bug #736347. code/dialogs/preferences-dialog.cpp | 1 + 1 file changed, 1 insertion(+) commit 5ca37221f9320cdc0a931b7a59d96c05cd7ac053 Author: Armin Burgmeier Date: Sun Mar 30 09:22:02 2014 +0200 Fix an assertion failure when a subscription fails code/commands/browser-commands.cpp | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) commit 0872bd045be70770ad773cbcb849555b316c6e4b Author: Armin Burgmeier Date: Fri Feb 28 16:35:15 2014 +0100 Adapt to simplification of InfRequest API code/commands/browser-commands.cpp | 12 ++++++-- code/commands/user-join-commands.cpp | 12 +++++--- code/core/documentinfostorage.cpp | 4 +-- code/core/documentinfostorage.hpp | 4 +-- code/core/nodewatch.cpp | 2 +- code/core/nodewatch.hpp | 4 +-- code/operations/operation-delete.cpp | 5 ++-- code/operations/operation-delete.hpp | 11 ++++---- code/operations/operation-new.cpp | 2 +- code/operations/operation-new.hpp | 11 ++++++-- code/operations/operation-open.cpp | 2 +- code/operations/operation-open.hpp | 11 ++++++-- code/operations/operation-subscribe-path.cpp | 39 +++++++++----------------- code/operations/operation-subscribe-path.hpp | 21 ++++++++------ 14 files changed, 74 insertions(+), 66 deletions(-) commit d0acc2931dfd3ff967d8bfcaaaffc0e0c057cf26 Author: Armin Burgmeier Date: Mon Feb 24 22:33:23 2014 +0100 Make sure to keep the same entry only once in the history entry This fixed bug #615. code/util/historyentry.cpp | 52 ++++++++++++++++++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 9 deletions(-) commit e85109184b847a6183370d52a56aa4e9540f55be Author: Armin Burgmeier Date: Fri Feb 14 19:28:44 2014 +0100 Fix a crash when a subscription fails code/commands/browser-commands.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) commit dcb78e601f080714afbf0bf4236a1cc890ce3ac7 Author: Armin Burgmeier Date: Sun Feb 9 17:45:03 2014 +0100 Fix background color query for textview In GTK+ 3, one needs to modify the style context before querying the color. There does not seem to be much documentation on this stuff around. I looked it up in the GtkTextView source code, hoping this remains a safe thigh to do in the future. code/core/textsessionview.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) commit 5d5cd6a945a4b88933fd318734867bd925fccd2d Author: Armin Burgmeier Date: Sun Feb 9 17:07:46 2014 +0100 Fix the build and some style issues with GTK+ 3 code/core/textsessionview.cpp | 36 ++++++++++++++++++++++++++++++++++- code/core/textsessionview.hpp | 9 +++++++++ code/dialogs/initial-dialog.hpp | 2 ++ code/dialogs/preferences-dialog.hpp | 1 + code/util/closebutton.cpp | 4 ++++ code/util/closebutton.hpp | 6 ++++++ code/util/groupframe.cpp | 1 + code/util/gtk-compat.hpp | 11 +++++++++++ code/util/uri.cpp | 4 ++++ 9 files changed, 73 insertions(+), 1 deletion(-) commit 8dc3ef46a98f9a93ee60db99e50e41aa541f5073 Author: Armin Burgmeier Date: Mon Jan 27 09:15:43 2014 +0100 Fix a crash when creating a new directory code/operations/operation-new.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) commit 7b1bf412bb9d8a25f2097ddbfb94da921ffcedae Author: Armin Burgmeier Date: Mon Jan 27 09:06:18 2014 +0100 Adapt to libinfinity API change The InfBrowser::unsubscribe-session signal now has an additional parameter. code/core/foldermanager.cpp | 3 ++- code/core/foldermanager.hpp | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) commit fa1c8a3d46c074d725dd8d3978062203894a59d0 Author: Armin Burgmeier Date: Fri Jan 24 12:16:24 2014 +0100 Remove the SelfHosting item from the TODO list This has essentially been implemented. TODO | 2 -- 1 file changed, 2 deletions(-) commit 22190ab7983ac2bb78b44127c4b04ad1516bebc2 Author: Armin Burgmeier Date: Fri Jan 24 12:07:28 2014 +0100 Close session on server side when removed from document tree code/core/foldermanager.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) commit 00e67a8a8373dbf02711cf7d1d576212a0f12bb6 Author: Armin Burgmeier Date: Fri Jan 24 10:15:11 2014 +0100 Fix the default value for keep-local-documents code/core/preferences.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit ae70678344bd4382f1588ad39b0029a793e84c3a Author: Armin Burgmeier Date: Thu Jan 23 21:18:17 2014 +0100 Fix memory corruption when node requests finish immediately code/commands/user-join-commands.cpp | 5 +++-- code/operations/operation-new.cpp | 9 ++++++--- code/operations/operation-open.cpp | 5 +++-- 3 files changed, 12 insertions(+), 7 deletions(-) commit b444d681cc831ebb51ab785c70ce9643c93cc9f9 Author: Armin Burgmeier Date: Wed Jan 22 18:21:15 2014 +0100 Get communication manager from connection manager in OperationOpen Previously OperationOpen got it from a call to InfcBrowser, which does not work anymore now that the browser can also be a InfdDirectory. We could of course make a branching here, but this way it is a more generic solution. code/core/browser.hpp | 3 +++ code/operations/operation-open.cpp | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) commit 8de335b2a902d4b42bcacf748dfbcd03e24ccaa6 Author: Armin Burgmeier Date: Wed Jan 22 12:11:30 2014 +0100 Unregister signal handlers in TitleBar destructor This fixes a crash when Gobby is closed while a session is still open. The titlebar is destructed first, but does not unregister its signal handlers. It is therefore called again later in the destruction sequence when all sessions are closed even though it does not exist anymore. code/core/titlebar.cpp | 5 +++++ code/core/titlebar.hpp | 1 + 2 files changed, 6 insertions(+) commit f2acf902f70f2da0f7dd388dcdd51f0d73b7f0df Author: Armin Burgmeier Date: Wed Jan 22 10:44:46 2014 +0100 Correctly handle user leave for self-hosted sessions code/commands/user-join-commands.cpp | 46 ++++++++++++++++++++++++++++++++++ code/core/folder.cpp | 4 --- 2 files changed, 46 insertions(+), 4 deletions(-) commit f43a2bfe67b7b87050bb528472a17d08fe377615 Author: Armin Burgmeier Date: Tue Jan 21 22:45:25 2014 +0100 Add a document to the folder on click when it is already subscribed Before we asserted that this could never happen. Indeed for the client case this would never happen, but for the server case we can be subscribed to a document when another client is subscribed. code/commands/browser-commands.cpp | 3 +-- code/operations/operation-subscribe-path.cpp | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) commit 2a5a758c5e47138f6c226f41d245e2b04dd5b219 Author: Armin Burgmeier Date: Tue Jan 21 16:10:07 2014 +0100 Refactor the folder management Introduce a new class FolderManager which takes care of TextFolder and ChatFolder. The FolderManager can be used to add new documents into the appropriate folder, and it provides add/remove signals that give access to the session proxy. This allows UserJoinCommands to use the proxy only relying on core objects, and it allows creating documents only for those subscriptions that were requested by the local client. code/commands/autosave-commands.cpp | 10 +- code/commands/autosave-commands.hpp | 4 +- code/commands/browser-commands.cpp | 125 ++++++--- code/commands/browser-commands.hpp | 24 +- code/commands/edit-commands.cpp | 2 +- code/commands/edit-commands.hpp | 4 +- code/commands/file-commands.cpp | 41 +-- code/commands/file-commands.hpp | 11 +- code/commands/file-tasks/task-save-all.cpp | 2 +- code/commands/file-tasks/task-save.cpp | 2 +- code/commands/folder-commands.cpp | 7 +- code/commands/folder-commands.hpp | 5 +- code/commands/subscription-commands.cpp | 270 +++--------------- code/commands/subscription-commands.hpp | 92 +------ code/commands/synchronization-commands.cpp | 30 +- code/commands/synchronization-commands.hpp | 15 +- code/commands/user-join-commands.cpp | 56 ++-- code/commands/user-join-commands.hpp | 22 +- code/commands/view-commands.cpp | 4 +- code/commands/view-commands.hpp | 8 +- code/core/Makefile.am | 2 + code/core/folder.cpp | 24 +- code/core/folder.hpp | 8 +- code/core/foldermanager.cpp | 365 +++++++++++++++++++++++++ code/core/foldermanager.hpp | 131 +++++++++ code/core/sessionuserview.hpp | 3 +- code/core/statusbar.cpp | 2 +- code/core/statusbar.hpp | 4 +- code/core/titlebar.cpp | 2 +- code/core/titlebar.hpp | 4 +- code/dialogs/find-dialog.cpp | 2 +- code/dialogs/find-dialog.hpp | 4 +- code/dialogs/goto-dialog.cpp | 2 +- code/dialogs/goto-dialog.hpp | 4 +- code/operations/operation-new.cpp | 5 + code/operations/operation-open.cpp | 7 + code/operations/operation-save.cpp | 8 +- code/operations/operation-save.hpp | 3 +- code/operations/operation-subscribe-path.cpp | 27 +- code/operations/operation-subscribe-path.hpp | 8 +- code/operations/operations.cpp | 16 +- code/operations/operations.hpp | 18 +- code/window.cpp | 28 +- code/window.hpp | 6 +- 44 files changed, 858 insertions(+), 559 deletions(-) commit ef150a606b37334b12c0496c064b0322f7585df7 Author: Armin Burgmeier Date: Mon Jan 20 16:15:18 2014 +0100 Adapt to libinfinity API change the request parameter has been introudced to the "node-added", "node-removed" and "subscribe-session" signals. code/commands/browser-commands.cpp | 4 +--- code/commands/subscription-commands.cpp | 3 ++- code/commands/subscription-commands.hpp | 6 ++++-- code/core/documentinfostorage.cpp | 7 ++++--- code/core/documentinfostorage.hpp | 6 ++++-- code/core/nodewatch.cpp | 3 ++- code/core/nodewatch.hpp | 6 ++++-- 7 files changed, 21 insertions(+), 14 deletions(-) commit 79c166cafbb3504c1fac12bd5d9ce469f6955e02 Author: Armin Burgmeier Date: Sun Jan 19 20:58:08 2014 +0100 Assign hostname from g_get_host_name() for served sessions This fixes a crash when subscribing to a self-hosted document locally. code/commands/subscription-commands.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) commit b706f5e8c87d6a1744e896870cf603b68260dec8 Author: Armin Burgmeier Date: Sun Jan 19 19:05:19 2014 +0100 Register a InfdNotePlugin for the SelfHoster's InfdDirectory code/core/browser.cpp | 23 +++++--- code/core/browser.hpp | 2 +- code/core/noteplugin.cpp | 101 +++++++++++++++++++++++++++++------ code/core/noteplugin.hpp | 6 ++- code/operations/operation-new.cpp | 2 +- code/operations/operation-open.cpp | 2 +- 6 files changed, 108 insertions(+), 28 deletions(-) commit bc3f41c2f9552cba616cf22aa2b4cd4748aeae56 Author: Armin Burgmeier Date: Fri Jan 17 23:35:23 2014 +0100 Make document info storage work with InfdDirectory browsers code/core/documentinfostorage.cpp | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) commit 2c7f50747b7ede631a1a86e6b6dd51aa8bcaaeeb Author: Armin Burgmeier Date: Fri Jan 17 21:30:51 2014 +0100 Simplify NodeWatch, and make it work for InfdDirectory nodes Instead of watching InfcBrowser:connection and InfXmlConnection:status, simply watch InfBrowser:status code/core/nodewatch.cpp | 102 ++++++++-------------------------------------- code/core/nodewatch.hpp | 24 +++-------- 2 files changed, 23 insertions(+), 103 deletions(-) commit f492abfacbb10c354bb3362feef01952ac0fea57 Author: Armin Burgmeier Date: Fri Jan 17 12:47:31 2014 +0100 Adapt to the "set-browser" change in the libinfgtk API code/commands/auth-commands.cpp | 17 +++++++++----- code/commands/auth-commands.hpp | 14 +++++++----- code/commands/browser-commands.cpp | 24 ++++++++----------- code/commands/browser-commands.hpp | 7 +++--- code/commands/subscription-commands.cpp | 17 ++++++-------- code/commands/subscription-commands.hpp | 7 +++--- code/core/browser.cpp | 7 +++--- code/core/browser.hpp | 8 ++++--- code/core/documentinfostorage.cpp | 38 ++++++++++++------------------- code/core/documentinfostorage.hpp | 8 ++++--- 10 files changed, 73 insertions(+), 74 deletions(-) commit 5e4ee41047f00f20e2c8415f2eb0c861169de206 Author: Armin Burgmeier Date: Thu Jan 16 19:42:36 2014 +0100 Show the local directory in the browser widget code/core/browser.cpp | 7 +++++++ code/core/browser.hpp | 1 + code/core/selfhoster.hpp | 1 + code/window.cpp | 3 +++ 4 files changed, 12 insertions(+) commit 0b70f5bc6a1c7d2a36050475fd5e570d9443c948 Author: Armin Burgmeier Date: Thu Jan 16 19:42:21 2014 +0100 Browser: Set the note plugins only for InfcBrowser Eventually we need to also set plugins for our InfdDirectory. I plan to re-use the code from infinoted's note plugin for this, by moving it to libinftext. code/core/browser.cpp | 12 ++++++++---- code/core/browser.hpp | 4 ++-- 2 files changed, 10 insertions(+), 6 deletions(-) commit 90cf3039c400f45f79e14cb0ffc4dff28be6adc9 Author: Armin Burgmeier Date: Thu Jan 16 18:17:00 2014 +0100 Require "://" instead of ":" for URI scheme recognization Otherwise a string such as localhost:6524 would be parsed as host 6524 with scheme localhost, instead of scheme infinote and host localhost. code/util/uri.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit 2d5f4432b9d689756dbbdb567c8aba80a6fb4ccd Author: Armin Burgmeier Date: Thu Jan 16 18:16:48 2014 +0100 Fix a crash due to an uninitialized variable code/operations/operation-subscribe-path.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) commit c2ffef7e907d58640f58d1d81c0216f597ecff15 Author: Armin Burgmeier Date: Thu Jan 16 17:50:45 2014 +0100 Change a string in the preferences dialog code/dialogs/preferences-dialog.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) commit f4193e88d2e3266f2e9b83b8becba1ddffac4654 Author: Armin Burgmeier Date: Thu Jan 16 17:17:26 2014 +0100 Check client passwords when specified in preferences code/commands/auth-commands.cpp | 52 ++++++++++- code/commands/auth-commands.hpp | 4 + code/core/connectionmanager.cpp | 3 +- code/core/selfhoster.cpp | 177 +++++++++++++++++++++++++++++--------- code/core/selfhoster.hpp | 18 +++- code/core/server.cpp | 36 +++++++- code/core/server.hpp | 8 +- code/window.cpp | 6 +- code/window.hpp | 13 ++- 9 files changed, 262 insertions(+), 55 deletions(-) commit ac62878a62b7174b383bdeb478920be8d52b514f Author: Armin Burgmeier Date: Wed Jan 15 10:12:35 2014 +0100 Add Gobby::SelfHoster This class manages a local InfdDirectory that it allows remote connections to access. code/core/Makefile.am | 2 + code/core/selfhoster.cpp | 199 +++++++++++++++++++++++++++++++++++++++++++++ code/core/selfhoster.hpp | 71 ++++++++++++++++ code/core/server.cpp | 4 +- code/core/statusbar.cpp | 3 +- code/window.cpp | 3 + code/window.hpp | 3 + 7 files changed, 282 insertions(+), 3 deletions(-) commit d0fe633ab26ec80458baab5cf36e15fee805e566 Author: Armin Burgmeier Date: Wed Jan 15 17:21:03 2014 +0100 Add the Gobby::ConnectionManager class This class manages the InfIo, InfCommunicationManager, InfXmppManager and InfDiscoveryAvahi objects. It allows to share these objects between the browser and the selfhoster without one of them depending on the other. code/commands/auth-commands.cpp | 8 +- code/commands/auth-commands.hpp | 2 + code/core/Makefile.am | 2 + code/core/browser.cpp | 156 +++------------------- code/core/browser.hpp | 31 +---- code/core/connectionmanager.cpp | 176 +++++++++++++++++++++++++ code/core/connectionmanager.hpp | 88 +++++++++++++ code/operations/operation-subscribe-path.hpp | 1 + code/window.cpp | 6 +- code/window.hpp | 2 +- 10 files changed, 304 insertions(+), 168 deletions(-) commit bd1fbfda0e5fa23bcf65449113f5a65b8f19c0a7 Author: Armin Burgmeier Date: Wed Jan 15 10:35:43 2014 +0100 Write Diffie-Hellman parameters to disk code/core/certificatemanager.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) commit aac5c52fc0041dd95ab2920b0d9b319fb8283eb1 Author: Armin Burgmeier Date: Wed Jan 15 10:12:10 2014 +0100 Add another modernization TODO item TODO | 1 + 1 file changed, 1 insertion(+) commit 2379bae61c303270f2dd84fbd27c7d8f12db6df1 Author: Armin Burgmeier Date: Wed Jan 15 10:11:28 2014 +0100 Add the Gobby::Server class This class will be used by the self-hosting functionality to run a TCP server which accepts incoming connections. code/core/Makefile.am | 2 + code/core/server.cpp | 248 ++++++++++++++++++++++++++++++++++++++++++++++++ code/core/server.hpp | 67 +++++++++++++ 3 files changed, 317 insertions(+) commit c8901681360e60a9182eb84da628e6163331294a Author: Armin Burgmeier Date: Wed Jan 15 10:09:17 2014 +0100 Add functionality to generate keys and certificates in the preferences dialog And also make it work in the welcome dialog. code/commands/edit-commands.cpp | 12 +- code/commands/edit-commands.hpp | 6 +- code/dialogs/initial-dialog.cpp | 153 +++++++++++++++++++++++-- code/dialogs/initial-dialog.hpp | 6 + code/dialogs/preferences-dialog.cpp | 207 +++++++++++++++++++++++++++++++--- code/dialogs/preferences-dialog.hpp | 126 ++++++++++++++++++++- code/window.cpp | 8 +- 7 files changed, 480 insertions(+), 38 deletions(-) commit 88de42e77275687a395b2e4ad488cb188a8df4d8 Author: Armin Burgmeier Date: Wed Jan 15 10:05:05 2014 +0100 Add functionality to set private keys and certificates programmatically code/core/certificatemanager.cpp | 273 +++++++++++++++++++++++++++++++------ code/core/certificatemanager.hpp | 23 +++- 2 files changed, 253 insertions(+), 43 deletions(-) commit e65a28f246cf58904db18f6e2332912671585511 Author: Armin Burgmeier Date: Wed Jan 15 10:03:29 2014 +0100 Replace keygen.cpp by credentialsgenerator.cpp The latter also has functions to generate Diffie-Hellman parameters and self-signed certificates. code/core/Makefile.am | 2 + code/core/credentialsgenerator.cpp | 208 +++++++++++++++++++++++++++++++++++ code/core/credentialsgenerator.hpp | 62 +++++++++++ code/util/Makefile.am | 2 - code/util/keygen.cpp | 90 --------------- code/util/keygen.hpp | 42 ------- 6 files changed, 272 insertions(+), 134 deletions(-) commit eafb37d4ad16fb8f1543c2e15bd66239ac9527be Author: Armin Burgmeier Date: Mon Jan 13 22:02:55 2014 +0100 Add DH params support to CertificateManager code/core/certificatemanager.cpp | 55 ++++++++++++++++++++++++++++++++++++-- code/core/certificatemanager.hpp | 6 +++++ 2 files changed, 59 insertions(+), 2 deletions(-) commit 220013dbd948cc0a30bcd04579537872d28c46fe Author: Armin Burgmeier Date: Sat Jan 4 17:47:49 2014 +0100 Add 2014 to copyright years AUTHORS | 4 ++-- README | 2 +- code/commands/auth-commands.cpp | 2 +- code/commands/auth-commands.hpp | 2 +- code/commands/autosave-commands.cpp | 2 +- code/commands/autosave-commands.hpp | 2 +- code/commands/browser-commands.cpp | 2 +- code/commands/browser-commands.hpp | 2 +- code/commands/browser-context-commands.cpp | 2 +- code/commands/browser-context-commands.hpp | 2 +- code/commands/edit-commands.cpp | 2 +- code/commands/edit-commands.hpp | 2 +- code/commands/file-tasks/task-export-html.cpp | 2 +- code/commands/file-tasks/task-export-html.hpp | 2 +- code/commands/file-tasks/task-new.cpp | 2 +- code/commands/file-tasks/task-new.hpp | 2 +- code/commands/file-tasks/task-open-file.cpp | 2 +- code/commands/file-tasks/task-open-file.hpp | 2 +- code/commands/file-tasks/task-open-location.cpp | 2 +- code/commands/file-tasks/task-open-location.hpp | 2 +- code/commands/file-tasks/task-open-multiple.cpp | 2 +- code/commands/file-tasks/task-open-multiple.hpp | 2 +- code/commands/file-tasks/task-open.cpp | 2 +- code/commands/file-tasks/task-open.hpp | 2 +- code/commands/file-tasks/task-save-all.cpp | 2 +- code/commands/file-tasks/task-save-all.hpp | 2 +- code/commands/file-tasks/task-save.cpp | 2 +- code/commands/file-tasks/task-save.hpp | 2 +- code/commands/folder-commands.cpp | 2 +- code/commands/folder-commands.hpp | 2 +- code/commands/help-commands.cpp | 4 ++-- code/commands/help-commands.hpp | 2 +- code/commands/subscription-commands.cpp | 2 +- code/commands/subscription-commands.hpp | 2 +- code/commands/synchronization-commands.cpp | 2 +- code/commands/synchronization-commands.hpp | 2 +- code/commands/user-join-commands.cpp | 2 +- code/commands/user-join-commands.hpp | 2 +- code/commands/view-commands.cpp | 2 +- code/commands/view-commands.hpp | 2 +- code/core/browser.cpp | 2 +- code/core/browser.hpp | 2 +- code/core/certificatemanager.cpp | 2 +- code/core/certificatemanager.hpp | 2 +- code/core/chatsessionview.cpp | 2 +- code/core/chatsessionview.hpp | 2 +- code/core/chattablabel.cpp | 2 +- code/core/chattablabel.hpp | 2 +- code/core/closableframe.cpp | 2 +- code/core/closableframe.hpp | 2 +- code/core/documentinfostorage.cpp | 2 +- code/core/documentinfostorage.hpp | 2 +- code/core/filechooser.cpp | 2 +- code/core/filechooser.hpp | 2 +- code/core/folder.cpp | 2 +- code/core/folder.hpp | 2 +- code/core/huebutton.cpp | 2 +- code/core/huebutton.hpp | 2 +- code/core/iconmanager.cpp | 2 +- code/core/iconmanager.hpp | 2 +- code/core/nodewatch.cpp | 2 +- code/core/nodewatch.hpp | 2 +- code/core/noteplugin.cpp | 2 +- code/core/noteplugin.hpp | 2 +- code/core/preferences.cpp | 2 +- code/core/preferences.hpp | 2 +- code/core/sessionuserview.cpp | 2 +- code/core/sessionuserview.hpp | 2 +- code/core/sessionview.cpp | 2 +- code/core/sessionview.hpp | 2 +- code/core/statusbar.cpp | 2 +- code/core/statusbar.hpp | 2 +- code/core/tablabel.cpp | 2 +- code/core/tablabel.hpp | 2 +- code/core/textsessionuserview.cpp | 2 +- code/core/textsessionuserview.hpp | 2 +- code/core/textsessionview.cpp | 2 +- code/core/textsessionview.hpp | 2 +- code/core/texttablabel.cpp | 2 +- code/core/texttablabel.hpp | 2 +- code/core/textundogrouping.cpp | 2 +- code/core/textundogrouping.hpp | 2 +- code/core/titlebar.cpp | 2 +- code/core/titlebar.hpp | 2 +- code/core/userlist.cpp | 2 +- code/core/userlist.hpp | 2 +- code/dialogs/connection-dialog.cpp | 2 +- code/dialogs/connection-dialog.hpp | 2 +- code/dialogs/document-location-dialog.cpp | 2 +- code/dialogs/document-location-dialog.hpp | 2 +- code/dialogs/entry-dialog.cpp | 2 +- code/dialogs/entry-dialog.hpp | 2 +- code/dialogs/find-dialog.cpp | 2 +- code/dialogs/find-dialog.hpp | 2 +- code/dialogs/goto-dialog.cpp | 2 +- code/dialogs/goto-dialog.hpp | 2 +- code/dialogs/initial-dialog.cpp | 2 +- code/dialogs/initial-dialog.hpp | 2 +- code/dialogs/open-location-dialog.cpp | 2 +- code/dialogs/open-location-dialog.hpp | 2 +- code/dialogs/password-dialog.cpp | 2 +- code/dialogs/password-dialog.hpp | 2 +- code/dialogs/preferences-dialog.cpp | 2 +- code/dialogs/preferences-dialog.hpp | 2 +- code/main.cpp | 2 +- code/operations/operation-delete.cpp | 2 +- code/operations/operation-delete.hpp | 2 +- code/operations/operation-export-html.cpp | 2 +- code/operations/operation-export-html.hpp | 2 +- code/operations/operation-new.cpp | 2 +- code/operations/operation-new.hpp | 2 +- code/operations/operation-open-multiple.cpp | 2 +- code/operations/operation-open-multiple.hpp | 2 +- code/operations/operation-open.cpp | 2 +- code/operations/operation-open.hpp | 2 +- code/operations/operation-save.cpp | 2 +- code/operations/operation-save.hpp | 2 +- code/operations/operation-subscribe-path.cpp | 2 +- code/operations/operation-subscribe-path.hpp | 2 +- code/operations/operations.cpp | 2 +- code/operations/operations.hpp | 2 +- code/util/asyncoperation.cpp | 2 +- code/util/asyncoperation.hpp | 2 +- code/util/closebutton.cpp | 2 +- code/util/closebutton.hpp | 2 +- code/util/color.cpp | 2 +- code/util/color.hpp | 2 +- code/util/config.cpp | 2 +- code/util/config.hpp | 2 +- code/util/defaultaccumulator.hpp | 2 +- code/util/file.cpp | 2 +- code/util/file.hpp | 2 +- code/util/groupframe.cpp | 2 +- code/util/groupframe.hpp | 2 +- code/util/gtk-compat.hpp | 2 +- code/util/historyentry.cpp | 2 +- code/util/historyentry.hpp | 2 +- code/util/i18n.cpp | 2 +- code/util/i18n.hpp | 2 +- code/util/keygen.cpp | 2 +- code/util/keygen.hpp | 2 +- code/util/resolv.cpp | 2 +- code/util/resolv.hpp | 2 +- code/util/serialize.cpp | 2 +- code/util/serialize.hpp | 2 +- code/util/uri.cpp | 2 +- code/util/uri.hpp | 2 +- code/window.cpp | 2 +- code/window.hpp | 2 +- 149 files changed, 151 insertions(+), 151 deletions(-) commit 767e12564e18fc4313f87c8b6acf65021e6d14af Author: Armin Burgmeier Date: Sat Dec 28 14:19:42 2013 +0100 Adapt to latest libinfinity API change code/commands/browser-commands.cpp | 52 +++-- code/commands/browser-commands.hpp | 19 ++ code/commands/browser-context-commands.cpp | 16 +- code/commands/file-tasks/task-open-multiple.cpp | 8 +- code/commands/file-tasks/task-open-multiple.hpp | 11 +- code/commands/user-join-commands.cpp | 32 +-- code/operations/operation-delete.cpp | 51 +++-- code/operations/operation-delete.hpp | 11 +- code/operations/operation-export-html.cpp | 37 ++-- code/operations/operation-export-html.hpp | 4 + code/operations/operation-new.cpp | 71 ++++--- code/operations/operation-new.hpp | 5 +- code/operations/operation-open-multiple.cpp | 83 +++++--- code/operations/operation-open-multiple.hpp | 10 +- code/operations/operation-open.cpp | 69 ++++--- code/operations/operation-open.hpp | 6 +- code/operations/operation-save.cpp | 29 +-- code/operations/operation-save.hpp | 3 + code/operations/operation-subscribe-path.cpp | 234 ++++++++++++++-------- code/operations/operation-subscribe-path.hpp | 9 +- code/operations/operations.cpp | 60 +++--- code/operations/operations.hpp | 13 +- 22 files changed, 506 insertions(+), 327 deletions(-) commit 469ed7546eaedc453d5c6eaa3c4b659cda849035 Author: Armin Burgmeier Date: Sun Nov 10 22:22:36 2013 +0100 Add appdata information (#611) Thanks to Till Maas who provided the file in the RedHat bugtracker: https://bugzilla.redhat.com/show_bug.cgi?id=1025924 Makefile.am | 3 +++ gobby-0.5.appdata.xml | 24 ++++++++++++++++++++++++ 2 files changed, 27 insertions(+) commit d9d5c9533de1be8e8e3b580f9078178f90bd5faf Author: Armin Burgmeier Date: Mon Aug 12 11:27:17 2013 +0200 Fix a crash switching between disconnected documents This resulted from the switch to the InfBrowser interface in libinfinity. The InfBrowser::unsubscribe-signal is now also emitted on disconnection or when the corresponding browser node is removed and the session was subscribed. However, this does not mean that we were unsubscribed from the session itself. For the latter, we watch InfSession::notify::subscription-group, which we now use as the only means for detecting unsubscription. Previously, it could happen that InfBrowser::unsubscribe-session was emitted in which case we removed the signal handler for InfSession::notify::subscription-group, but did not reset the active user from the session view, and then switching to the document lead to a crash. code/commands/subscription-commands.cpp | 36 ++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 13 deletions(-) commit 2650acbe938378fe78446309226458b48dd97b6f Author: Armin Burgmeier Date: Mon Aug 12 10:56:20 2013 +0200 Add support for chat session inside the directory structure code/commands/subscription-commands.cpp | 30 ++++++++++++++++++++++---- code/core/browser.cpp | 8 ++++--- code/core/browser.hpp | 2 -- code/core/chattablabel.cpp | 20 +++++++++++++---- code/core/chattablabel.hpp | 4 +++- code/core/folder.cpp | 3 ++- code/core/noteplugin.cpp | 36 ++++++++++++++++++++++++++----- code/core/noteplugin.hpp | 1 + code/window.cpp | 4 +--- 9 files changed, 85 insertions(+), 23 deletions(-) commit fec95739eafb9ba21fa1aa42b8c095288d3ca60f Author: Armin Burgmeier Date: Sun Aug 11 15:13:03 2013 +0200 Adapt for libinfinity API changes code/commands/user-join-commands.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) commit 77a2d63711f5966fab8bbf5caca98cf1b446ae21 Author: Armin Burgmeier Date: Tue Aug 6 12:03:03 2013 +0200 Handle gracefully the case when a document is not allowed to be edited code/commands/subscription-commands.cpp | 6 +- code/commands/subscription-commands.hpp | 3 +- code/commands/synchronization-commands.cpp | 4 +- code/commands/synchronization-commands.hpp | 4 +- code/commands/user-join-commands.cpp | 128 +++++++++++++++++--------- code/commands/user-join-commands.hpp | 10 +- code/core/nodewatch.cpp | 29 ++++-- code/core/nodewatch.hpp | 7 +- code/operations/operation-open-multiple.cpp | 2 +- code/operations/operation-open.cpp | 2 +- 10 files changed, 133 insertions(+), 62 deletions(-) commit b7aff1fafceb717fa5527c2b936e1c9f8e8792fb Author: Armin Burgmeier Date: Thu Aug 1 12:34:40 2013 +0200 Add some modernization items on the TODO list, for post-0.5 TODO | 5 +++++ 1 file changed, 5 insertions(+) commit 18ddc57c781bb85efc72131112c0ab79431e6650 Author: Armin Burgmeier Date: Thu Aug 1 12:34:21 2013 +0200 Add a function to asynchronously create a private key code/util/Makefile.am | 2 ++ code/util/keygen.cpp | 90 +++++++++++++++++++++++++++++++++++++++++++++++++ code/util/keygen.hpp | 42 +++++++++++++++++++++++ 3 files changed, 134 insertions(+) commit 72a8c3550e956092c551c0ef4751e3cc8d72614b Author: Armin Burgmeier Date: Wed Jul 31 17:56:28 2013 +0200 Close context menu dialogs when the corresponding browser node disappears code/commands/browser-context-commands.cpp | 1 - code/core/nodewatch.cpp | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) commit e37d37d3096d879cdf32eee5edd03458ec0a4e58 Author: Armin Burgmeier Date: Wed Jul 31 08:13:26 2013 +0200 Do not expand the path explicitly in Browser::set_selected() This is already done by inf_gtk_browser_view_set_selected(), which is called by Browser::set_selected() to do the actual job. code/core/browser.cpp | 6 ------ 1 file changed, 6 deletions(-) commit 598ed2a7cfb44083c877b165b021c7c376a4321e Author: Armin Burgmeier Date: Wed Jul 31 08:12:42 2013 +0200 Add a context menu item to show the permissions dialog This allows to view and modify the ACL for a node, if corresponding permissions are granted. code/commands/browser-context-commands.cpp | 118 +++++++++++++++++++-------- code/commands/browser-context-commands.hpp | 14 ++-- 2 files changed, 88 insertions(+), 44 deletions(-) commit 2dd456346a84ced9ff94429eca920858fbb94aa4 Author: Armin Burgmeier Date: Wed Jul 31 08:09:48 2013 +0200 UserList: Make sure a user name is visible when the user is known code/core/userlist.cpp | 1 + 1 file changed, 1 insertion(+) commit 918a6ca7973c53e118ff0916043299207dc01abd Author: Armin Burgmeier Date: Fri Jul 26 16:17:23 2013 +0200 Add GroupFrame class, replacing Group in preferencesDialog code/dialogs/preferences-dialog.cpp | 24 ----------------- code/dialogs/preferences-dialog.hpp | 50 ++++++++++++++--------------------- code/util/Makefile.am | 2 ++ code/util/groupframe.cpp | 46 ++++++++++++++++++++++++++++++++ code/util/groupframe.hpp | 41 ++++++++++++++++++++++++++++ 5 files changed, 109 insertions(+), 54 deletions(-) commit 09f044ad8d5d7c2461cfe6c209ba6f8f8910433a Author: Armin Burgmeier Date: Mon Jul 22 15:19:46 2013 +0200 Wait for connection to finish before finishing OperationSubscribePath This also simplifies the code a bit. code/operations/operation-subscribe-path.cpp | 30 ++++++++++---------------- 1 file changed, 11 insertions(+), 19 deletions(-) commit 8593d003e59a8d78ec91e7dd4812e6488f282b65 Author: Armin Burgmeier Date: Sun Jul 21 20:56:00 2013 +0200 Open infinote:// URLs given on the command line code/main.cpp | 1 - code/window.cpp | 29 +++++++++++++++++++++-------- code/window.hpp | 2 +- 3 files changed, 22 insertions(+), 10 deletions(-) commit 5a93cdcc39d59198816076acbcc4e2ef1d708320 Author: Armin Burgmeier Date: Sun Jul 21 17:21:40 2013 +0200 Use OperationSubscribePath for direct connection handling This simplifies the code in the Browser class a bit, and does exactly the same thing. Also, it enables a new feature which is to write the full path to a document on the remote server into the direct connection field, and Gobby then tries to subscribe to the document. code/commands/browser-commands.cpp | 13 +++- code/commands/browser-commands.hpp | 7 +- code/commands/file-commands.cpp | 4 +- code/core/browser.cpp | 90 ++++---------------------- code/core/browser.hpp | 33 ++-------- code/operations/operation-subscribe-path.cpp | 68 +++++++++++++++---- code/operations/operations.cpp | 19 +++++- code/window.cpp | 3 +- code/window.hpp | 2 +- 9 files changed, 110 insertions(+), 129 deletions(-) commit f4ad2067eb5bd1004c503e215ca6d4cfa9def870 Author: Armin Burgmeier Date: Sun Jul 21 16:52:22 2013 +0200 Add OperationSubscribePath code/core/browser.cpp | 30 +- code/operations/Makefile.am | 6 +- code/operations/operation-subscribe-path.cpp | 415 +++++++++++++++++++++++++ code/operations/operation-subscribe-path.hpp | 104 +++++++ code/operations/operations.cpp | 25 +- code/operations/operations.hpp | 18 +- code/util/uri.cpp | 35 +++ code/util/uri.hpp | 5 + code/window.cpp | 2 +- 9 files changed, 630 insertions(+), 10 deletions(-) commit 8a6feb58e958e3fc528cdc6c7889bfe97efa988e Author: Armin Burgmeier Date: Sun Jul 21 12:15:13 2013 +0200 Extend the Browser public API a bit, to be able to add a connection directly This would work in principle already by just calling inf_gtk_browser_store_add_connection(), but via the browser API it is made sure that the connection is also registered in the XMPP manager. code/core/browser.cpp | 344 ++++++++++++++++++++++-------------------------- code/core/browser.hpp | 6 +- code/util/Makefile.am | 6 +- code/util/uri.cpp | 83 ++++++++++++ code/util/uri.hpp | 33 +++++ 5 files changed, 280 insertions(+), 192 deletions(-) commit 972dcb8836281e3c3eff89a42dfc035c53ef45d4 Author: Armin Burgmeier Date: Thu Jul 18 11:02:53 2013 +0200 Show certificate or key load errors in preferences dialog code/commands/edit-commands.cpp | 8 +++--- code/commands/edit-commands.hpp | 4 ++- code/core/certificatemanager.hpp | 2 -- code/dialogs/preferences-dialog.cpp | 48 ++++++++++++++++++++++++++++++++--- code/dialogs/preferences-dialog.hpp | 15 +++++++++-- code/window.cpp | 2 +- 6 files changed, 67 insertions(+), 12 deletions(-) commit 1f7b98f5d8d45c612e80bcec19bec8961506b532 Author: Armin Burgmeier Date: Wed Jul 17 17:38:12 2013 +0200 Fix a memory leak in CertificateManager code/core/certificatemanager.cpp | 1 + 1 file changed, 1 insertion(+) commit d1ab9030c505fb0c6f6d094c133e450351915537 Author: Armin Burgmeier Date: Wed Jul 17 14:59:14 2013 +0200 Move Preferences and CertificateManager instantiation to main() code/main.cpp | 14 ++++++++++---- code/window.cpp | 17 ++++++++--------- code/window.hpp | 10 ++++++---- 3 files changed, 24 insertions(+), 17 deletions(-) commit 15fbe0cf08ae7ff3ab74aa8b562c2f97bbaccc93 Author: Armin Burgmeier Date: Wed Jul 17 14:14:45 2013 +0200 Add the CertificateManager class This class manages the certificate credentials for authentication with client side certificates and for a server certificate to show to clients in the upcoming selfhosting feature. It also manages the list of trusted CAs. code/core/Makefile.am | 2 + code/core/browser.cpp | 34 +++--- code/core/browser.hpp | 11 +- code/core/certificatemanager.cpp | 229 +++++++++++++++++++++++++++++++++++++ code/core/certificatemanager.hpp | 91 +++++++++++++++ code/window.cpp | 6 +- code/window.hpp | 1 + 7 files changed, 354 insertions(+), 20 deletions(-) commit d3b263b277c0116df21dfc55c7576a3b278b79f6 Author: Armin Burgmeier Date: Mon Apr 22 21:49:59 2013 +0200 Implement new security options in preferences dialog code/dialogs/preferences-dialog.cpp | 73 ++++++++++++++++++++++++++++++++++- code/dialogs/preferences-dialog.hpp | 14 +++++++ 2 files changed, 86 insertions(+), 1 deletion(-) commit 34a89fc29039f6c5fce513a7e980a067f2319c47 Author: Armin Burgmeier Date: Sun Apr 21 22:35:13 2013 +0200 Add options for self hosting in user pane of preferences dialog code/core/preferences.cpp | 5 + code/core/preferences.hpp | 1 + code/dialogs/initial-dialog.cpp | 6 +- code/dialogs/preferences-dialog.cpp | 184 +++++++++++++++++++++++++++------- code/dialogs/preferences-dialog.hpp | 24 ++++- 5 files changed, 176 insertions(+), 44 deletions(-) commit e342e741ba799bcd280ec6b5a327b4993d809f8f Author: Armin Burgmeier Date: Sat Apr 20 18:36:38 2013 +0200 Add self hosting options into initial dialog code/dialogs/initial-dialog.cpp | 267 +++++++++++++++++++++++++++++++++++--- code/dialogs/initial-dialog.hpp | 33 ++++- 2 files changed, 278 insertions(+), 22 deletions(-) commit 39ca86173eabc9d839ca5680a6c5cb7e981fd8b4 Author: Armin Burgmeier Date: Sat Apr 20 18:36:15 2013 +0200 Add new preferences for self hosting code/core/preferences.cpp | 32 +++++++++++++++++++++++++++----- code/core/preferences.hpp | 11 ++++++++++- 2 files changed, 37 insertions(+), 6 deletions(-) commit 1e832f3c62363f6d859c7d69471102153f00ce92 Author: Armin Burgmeier Date: Tue Jul 16 19:44:48 2013 +0200 Fix FSF address in COPYING file Bug report #609, http://gobby.0x539.de/trac/ticket/609 COPYING | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) commit 7419121794423039a720cbfd816f9bfc16c8955e Author: Armin Burgmeier Date: Tue Jul 16 19:34:07 2013 +0200 Fix compilation with recent versions of gcc Patch by till, http://gobby.0x539.de/trac/ticket/604 code/core/header.cpp | 1 + code/core/textsessionview.cpp | 3 +++ code/operations/operation-export-html.cpp | 1 + 3 files changed, 5 insertions(+) commit 3835bea8f8b3c9263af290dab0fc209e496c0cbf Author: Armin Burgmeier Date: Tue Jul 16 19:30:17 2013 +0200 Fix compilation with clang Patch by jhowarth, http://gobby.0x539.de/trac/ticket/600 code/util/config.hpp | 92 +++++++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 46 deletions(-) commit 4aa8065e96603c57c09de7967b3a5c58cc73bd0e Author: Armin Burgmeier Date: Tue Jul 16 17:39:32 2013 +0200 Add 2013 to the copyright years code/commands/auth-commands.cpp | 2 +- code/commands/auth-commands.hpp | 2 +- code/commands/autosave-commands.cpp | 2 +- code/commands/autosave-commands.hpp | 2 +- code/commands/browser-commands.cpp | 2 +- code/commands/browser-commands.hpp | 2 +- code/commands/browser-context-commands.cpp | 2 +- code/commands/browser-context-commands.hpp | 2 +- code/commands/edit-commands.cpp | 2 +- code/commands/edit-commands.hpp | 2 +- code/commands/file-tasks/task-export-html.cpp | 2 +- code/commands/file-tasks/task-export-html.hpp | 2 +- code/commands/file-tasks/task-new.cpp | 2 +- code/commands/file-tasks/task-new.hpp | 2 +- code/commands/file-tasks/task-open-file.cpp | 2 +- code/commands/file-tasks/task-open-file.hpp | 2 +- code/commands/file-tasks/task-open-location.cpp | 2 +- code/commands/file-tasks/task-open-location.hpp | 2 +- code/commands/file-tasks/task-open-multiple.cpp | 2 +- code/commands/file-tasks/task-open-multiple.hpp | 2 +- code/commands/file-tasks/task-open.cpp | 2 +- code/commands/file-tasks/task-open.hpp | 2 +- code/commands/file-tasks/task-save-all.cpp | 2 +- code/commands/file-tasks/task-save-all.hpp | 2 +- code/commands/file-tasks/task-save.cpp | 2 +- code/commands/file-tasks/task-save.hpp | 2 +- code/commands/folder-commands.cpp | 2 +- code/commands/folder-commands.hpp | 2 +- code/commands/help-commands.cpp | 4 ++-- code/commands/help-commands.hpp | 2 +- code/commands/subscription-commands.cpp | 2 +- code/commands/subscription-commands.hpp | 2 +- code/commands/synchronization-commands.cpp | 2 +- code/commands/synchronization-commands.hpp | 2 +- code/commands/user-join-commands.cpp | 2 +- code/commands/user-join-commands.hpp | 2 +- code/commands/view-commands.cpp | 2 +- code/commands/view-commands.hpp | 2 +- code/core/browser.cpp | 2 +- code/core/browser.hpp | 2 +- code/core/chatsessionview.cpp | 2 +- code/core/chatsessionview.hpp | 2 +- code/core/chattablabel.cpp | 2 +- code/core/chattablabel.hpp | 2 +- code/core/closableframe.cpp | 2 +- code/core/closableframe.hpp | 2 +- code/core/documentinfostorage.cpp | 2 +- code/core/documentinfostorage.hpp | 2 +- code/core/filechooser.cpp | 2 +- code/core/filechooser.hpp | 2 +- code/core/folder.cpp | 2 +- code/core/folder.hpp | 2 +- code/core/huebutton.cpp | 2 +- code/core/huebutton.hpp | 2 +- code/core/iconmanager.cpp | 2 +- code/core/iconmanager.hpp | 2 +- code/core/nodewatch.cpp | 2 +- code/core/nodewatch.hpp | 2 +- code/core/noteplugin.cpp | 2 +- code/core/noteplugin.hpp | 2 +- code/core/preferences.cpp | 2 +- code/core/preferences.hpp | 2 +- code/core/sessionuserview.cpp | 2 +- code/core/sessionuserview.hpp | 2 +- code/core/sessionview.cpp | 2 +- code/core/sessionview.hpp | 2 +- code/core/statusbar.cpp | 2 +- code/core/statusbar.hpp | 2 +- code/core/tablabel.cpp | 2 +- code/core/tablabel.hpp | 2 +- code/core/textsessionuserview.cpp | 2 +- code/core/textsessionuserview.hpp | 2 +- code/core/textsessionview.cpp | 2 +- code/core/textsessionview.hpp | 2 +- code/core/texttablabel.cpp | 2 +- code/core/texttablabel.hpp | 2 +- code/core/textundogrouping.cpp | 2 +- code/core/textundogrouping.hpp | 2 +- code/core/titlebar.cpp | 2 +- code/core/titlebar.hpp | 2 +- code/core/userlist.cpp | 2 +- code/core/userlist.hpp | 2 +- code/dialogs/connection-dialog.cpp | 2 +- code/dialogs/connection-dialog.hpp | 2 +- code/dialogs/document-location-dialog.cpp | 2 +- code/dialogs/document-location-dialog.hpp | 2 +- code/dialogs/entry-dialog.cpp | 2 +- code/dialogs/entry-dialog.hpp | 2 +- code/dialogs/find-dialog.cpp | 2 +- code/dialogs/find-dialog.hpp | 2 +- code/dialogs/goto-dialog.cpp | 2 +- code/dialogs/goto-dialog.hpp | 2 +- code/dialogs/initial-dialog.cpp | 2 +- code/dialogs/initial-dialog.hpp | 2 +- code/dialogs/open-location-dialog.cpp | 2 +- code/dialogs/open-location-dialog.hpp | 2 +- code/dialogs/password-dialog.cpp | 2 +- code/dialogs/password-dialog.hpp | 2 +- code/dialogs/preferences-dialog.cpp | 2 +- code/dialogs/preferences-dialog.hpp | 2 +- code/main.cpp | 2 +- code/operations/operation-delete.cpp | 2 +- code/operations/operation-delete.hpp | 2 +- code/operations/operation-export-html.cpp | 2 +- code/operations/operation-export-html.hpp | 2 +- code/operations/operation-new.cpp | 2 +- code/operations/operation-new.hpp | 2 +- code/operations/operation-open-multiple.cpp | 2 +- code/operations/operation-open-multiple.hpp | 2 +- code/operations/operation-open.cpp | 2 +- code/operations/operation-open.hpp | 2 +- code/operations/operation-save.cpp | 2 +- code/operations/operation-save.hpp | 2 +- code/operations/operations.cpp | 2 +- code/operations/operations.hpp | 2 +- code/util/asyncoperation.cpp | 2 +- code/util/asyncoperation.hpp | 2 +- code/util/closebutton.cpp | 2 +- code/util/closebutton.hpp | 2 +- code/util/color.cpp | 2 +- code/util/color.hpp | 2 +- code/util/config.cpp | 2 +- code/util/config.hpp | 2 +- code/util/defaultaccumulator.hpp | 2 +- code/util/file.cpp | 2 +- code/util/file.hpp | 2 +- code/util/gtk-compat.hpp | 2 +- code/util/historyentry.cpp | 2 +- code/util/historyentry.hpp | 2 +- code/util/i18n.cpp | 2 +- code/util/i18n.hpp | 2 +- code/util/resolv.cpp | 2 +- code/util/resolv.hpp | 2 +- code/util/serialize.cpp | 2 +- code/util/serialize.hpp | 2 +- code/window.cpp | 2 +- code/window.hpp | 2 +- 137 files changed, 138 insertions(+), 138 deletions(-) commit b8bcd51c7681b9397527cdacb6bd78f90d156083 Author: Armin Burgmeier Date: Tue Jul 16 16:33:07 2013 +0200 Adapt gobby to the API changes in libinfinity code/commands/browser-commands.cpp | 5 ++--- code/operations/operation-new.cpp | 3 ++- code/operations/operation-open.cpp | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) commit bfd20c847dcc38d7947d726ed2b70b0922852673 Author: Armin Burgmeier Date: Tue Jun 25 09:56:56 2013 +0200 Fix a possible crash when adding a user to the userlist A crash could happen if the cell data func was called before the user object was set in the row of the list store. A cleaner way to avoid this would be to atomically create the row and set the data, using gtk_list_store_insert_with_values(), but this API is not wrapped in gtkmm. Many thanks to Rainer Rehak for reporting this! (http://permalink.gmane.org/gmane.network.obby.user/411) code/core/userlist.cpp | 68 +++++++++++++++++++++++++++++++----------------- 1 file changed, 44 insertions(+), 24 deletions(-) commit 75c4c15a7aaf3e9fd3ed5faa16b75021d2242c53 Author: Armin Burgmeier Date: Thu Jun 27 08:57:16 2013 +0200 Fix a crash when gobby is invoked with invalid UTF-8 on the command line Conflicts: ChangeLog.pre-0.5 src/main.cpp code/main.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) commit 8c5050b964a9b06e00b13d0a52a0fc11736945f1 Author: Armin Burgmeier Date: Wed May 1 20:41:10 2013 +0200 Add AsyncOperation class, use it for hostname resolution code/core/browser.cpp | 13 +++-- code/core/browser.hpp | 20 ++++--- code/util/Makefile.am | 2 + code/util/asyncoperation.cpp | 104 +++++++++++++++++++++++++++++++++ code/util/asyncoperation.hpp | 68 ++++++++++++++++++++++ code/util/resolv.cpp | 128 +++++++++++++++++++---------------------- code/util/resolv.hpp | 18 +++--- 7 files changed, 260 insertions(+), 93 deletions(-) commit fc73c71249a2364454ff28537b2f238bb29cc3da Author: Armin Burgmeier Date: Sun Apr 14 12:21:37 2013 +0200 Use InfBrowser instead of InfcBrowser; adapt to libinfinity API changes code/commands/browser-commands.cpp | 175 +++++++++------ code/commands/browser-commands.hpp | 17 +- code/commands/browser-context-commands.cpp | 257 +++++++++++----------- code/commands/browser-context-commands.hpp | 16 +- code/commands/file-tasks/task-new.cpp | 4 +- code/commands/file-tasks/task-open-multiple.cpp | 4 +- code/commands/file-tasks/task-open.cpp | 4 +- code/commands/subscription-commands.cpp | 133 ++++++----- code/commands/subscription-commands.hpp | 51 ++--- code/commands/synchronization-commands.cpp | 4 +- code/commands/synchronization-commands.hpp | 4 +- code/commands/user-join-commands.cpp | 109 ++++----- code/commands/user-join-commands.hpp | 6 +- code/core/browser.cpp | 44 ++-- code/core/browser.hpp | 6 +- code/core/documentinfostorage.cpp | 46 ++-- code/core/documentinfostorage.hpp | 37 ++-- code/core/nodewatch.cpp | 34 +-- code/core/nodewatch.hpp | 20 +- code/dialogs/document-location-dialog.cpp | 19 +- code/dialogs/document-location-dialog.hpp | 2 +- code/operations/operation-delete.cpp | 38 ++-- code/operations/operation-delete.hpp | 25 +-- code/operations/operation-new.cpp | 49 +++-- code/operations/operation-new.hpp | 27 +-- code/operations/operation-open-multiple.cpp | 4 +- code/operations/operation-open-multiple.hpp | 4 +- code/operations/operation-open.cpp | 60 ++--- code/operations/operation-open.hpp | 27 +-- code/operations/operations.cpp | 20 +- code/operations/operations.hpp | 20 +- 31 files changed, 643 insertions(+), 623 deletions(-) commit c07e248aeffc3f1ccea96a9ae6bc401f779d29c8 Author: Armin Burgmeier Date: Tue May 28 21:23:51 2013 +0200 Add a slider to change the intesity of user colors code/core/preferences.cpp | 2 ++ code/core/preferences.hpp | 1 + code/core/textsessionview.cpp | 18 ++++++++++++++++++ code/core/textsessionview.hpp | 1 + code/dialogs/preferences-dialog.cpp | 35 +++++++++++++++++++++++++++++++++++ code/dialogs/preferences-dialog.hpp | 5 +++++ 6 files changed, 62 insertions(+) commit 46b4c2c22a889734a6d9cd545c7fcb36f544fd1e Author: Armin Burgmeier Date: Mon Apr 22 16:55:16 2013 +0200 Auto-generate the ChangeLog from git ChangeLog | 3267 ---------------------------------------------------- ChangeLog.manual | 3267 ++++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile.am | 24 + 3 files changed, 3291 insertions(+), 3267 deletions(-) 2012-12-04 Philipp Kern * po/LINGUAS: * po/ca.po: Add Catalan translation, thanks to Jordi Mallach. 2012-04-30 Philipp Kern * gobby-0.5.1: Fix a grammar mistake. 2012-04-29 Armin Burgmeier * code/commands/autosave-commands.cpp: * code/commands/folder-commands.cpp: * code/commands/user-join-commands.cpp: * code/core/filechooser.cpp: * code/core/folder.cpp: * code/core/header.cpp: * code/core/preferences.cpp: * code/core/statusbar.cpp: * code/core/textsessionview.cpp: * code/dialogs/initial-dialog.cpp: * code/dialogs/preferences-dialog.cpp: * code/operations/operation-open.cpp: * code/operations/operation-open.hpp: * code/operations/operation-save.hpp: Add some missing glibmm includes that are no longer pulled in by gtkmm since recent gtkmm3 versions. 2012-03-18 Philipp Kern * code/util/gtk-compat.hpp: Fix the call of Gtk3's gtk-widget-render-icon-pixbuf, which is allowed to return NULL if the stock icon does not exist. Guard it with MISSING_IMAGE. 2012-03-18 Philipp Kern * configure.ac: Support the new libinfinity library names built against Gtk3. 2011-10-25 Philipp Kern * configure.ac: drop AM_MAINTAINER_MODE 2011-08-07 Philipp Kern * code/core/browser.cpp: * code/core/browser.hpp: * code/util/historyentry.cpp: * code/util/historyentry.hpp: Make direct connection host name entry field accessible. (#570) 2011-07-30 Philipp Kern * code/core/documentinfostorage.cpp: * code/core/folder.cpp: * code/util/config.cpp: * code/util/file.cpp: create directories with mode 0700 (Debian bug #636015) 2011-04-03 Philipp Kern * *.cpp, *.hpp: adjusted the address of the Free Software Foundation to match the current one 2011-03-27 Armin Burgmeier * configure.ac: Post-release bump to 0.4.95, require libinfinity-0.6. * README: Update dependencies list. 2011-03-27 Armin Burgmeier * === Released 0.4.94 === * README: * NEWS: Update for release. 2011-03-27 Armin Burgmeier * configure.ac: Use unique-3.0 when compiling against GTK+ 3.0. 2011-01-30 Armin Burgmeier * code/commands/subscription-commands.cpp (on_notify_connection): Don't show the info text if session's state is not RUNNING. In that case the connection was unset in SYNCHRONIZING state in which case synchronization-commands will set a more specific error message. 2011-01-30 Armin Burgmeier * code/core/folder.cpp (remove_document): Don't call inf_session_close() if the session is already closed. This can happen if the session synchronization fails. 2011-01-29 Armin Burgmeier * all source files: Add 2011 to copyright years. 2011-01-29 Armin Burgmeier * code/core/textsessionview.cpp (get_cursor_position): Fix a compiler warning. 2011-01-29 Armin Burgmeier * code/core/textsessionuserview.hpp: * code/core/textsessionuserview.cpp: * code/core/Makefile.am: Add the InfTextSessionUserView class which handles scrolling to a remote user's cursor when double-clicking it in the user list. * code/core/userlist.hpp: * code/core/userlist.cpp: Add the user_activated signal. * code/core/folder.cpp: Create a TextSessionUserView for text sessions. 2011-01-29 Armin Burgmeier * code/core/sessionuserview.hpp: Fix the include guard. 2011-01-29 Armin Burgmeier * code/util/gtk-compat.hpp: Add a wrapper for Gtk::IconSet which is now used by a RefPtr in gtkmm 3. * code/core/iconmanager.hpp: * code/core/iconmanager.cpp: Adapt for that. * code/core/textsessionview.hpp: * code/operations/operations.hpp: * code/operations/operation-export-html.cpp: Rearrange some include directives to avoid including gtkmm headers after Xlib headers, which causes trouble because of common Xlib #defines such as None, Window or Status. 2011-01-24 Armin Burgmeier * code/util/gtk-compat.cpp: Fix a crash when connecting to a server with GTK+ 2. 2011-01-23 Armin Burgmeier * code/util/gtk-compat.hpp: * code/util/historyentry.hpp: * code/util/historyentry.cpp: * code/util/Makefile.am: * code/core/browser.cpp: * code/core/closableframe.cpp: * code/core/folder.hpp: * code/core/folder.cpp: * code/core/preferences.cpp: * code/core/sessionuserview.cpp: * code/core/statusbar.cpp: * code/core/tablabel.cpp: * code/core/texttablabel.hpp: * code/core/texttablabel.cpp: * code/core/userlist.cpp: * code/dialogs/document-location-dialog.cpp: * code/dialogs/entry-dialog.cpp: * code/dialogs/find-dialog.cpp: * code/dialogs/goto-dialog.cpp: * code/dialogs/initial-dialog.cpp: * code/dialogs/open-location-dialog.cpp: * code/dialogs/preferences-dialog.cpp: * code/operations/operation-export-html.cpp: * code/operations/operation-save.cpp: * code/commands/browser-context-commands.cpp: * code/commands/edit-commands.cpp: * code/commands/help-commands.cpp: * code/commands/user-join-commands.cpp: * code/commands/view-commands.cpp: * code/window.cpp: * code/main.cpp: * configure.ac: Add a --with-gtk3 switch to Gobby and adapt the code so that it compiles with gtkmm-3. If GTK 3 is enabled then the --with-unique switch is ignored. Eventually we need to port that code to GtkApplication. 2010-12-25 Armin Burgmeier * code/core/browser.hpp: * code/core/browser.cpp: * code/commands/auth-commands.hpp: * code/commands/auth-commands.cpp: Adapt to latest API changes in libinfinity, show password dialog asynchronously. 2010-09-21 Armin Burgmeier * code/commands/browser-context-commands.hpp: * code/commands/browser-context-commands.cpp: Add a "Disconnect from Server" option to the context menu (#542). 2010-09-21 Armin Burgmeier * code/core/preferences.hpp: * code/core/preferences.cpp: Add preferences options for showing remote cursors, selections, current lines and cursor positions in the scrollbar. * code/core/textsessionview.hpp: * code/core/textsessionview.cpp: Apply the new settings on the underlying objects. * code/dialogs/preferences-dialog.hpp: * code/dialogs/preferences-dialog.cpp: Add the new options to the preferences dialog. 2010-06-04 Armin Burgmeier * code/core/texttablabel.hpp: * code/core/texttablabel.cpp: Adapt for a recent API change in InfTextBuffer. 2010-03-02 Armin Burgmeier * gobby-0.5.desktop.in: Added GenericName and X-GNOME-FullName fields, changed Name to be just Gobby. Bug #528. 2010-02-25 Armin Burgmeier * code/core/textsessionview.hpp: * code/core/textsessionview.cpp: Show remote users' position in scrollbar using InfTextGtkViewport. 2010-02-14 Benjamin Herr * code/dialogs/password-dialog.cpp: * code/operations/operation-delete.cpp: * code/operations/operation-new.cpp: * code/operations/operation-open.cpp: * code/operations/operation-save.cpp: Added quotation marks in messages including file paths or document names. * code/operations/operation-export-html.cpp: Quotations marks as above, also moved a comment so it shows up in .po files. * code/commands/help-commands.cpp: Updated FSF address in GPL, added Michael Frey to translation credits. 2010-02-13 Armin Burgmeier * code/core/textsessionview.hpp: * code/core/textsessionview.cpp: Add a InfTextGtkView, to show remote cursors. 2010-02-12 Armin Burgmeier * all source files: Added 2010 to copyright years. 2010-02-09 Benjamin Herr * code/commands/auth-commands.hpp: * code/commands/auth-commands.cpp: Handle _TRY_AGAIN errors, do the whole retrying thing properly. 2010-01-31 Benjamin Herr , Armin Burgmeier * code/commands/auth-commands.cpp: Adapt to the removal of the user-authenticated signal, instead query detailed SASL error using inf_xmpp_connection_get_sasl_error(). 2009-01-27 Benjamin Herr * code/commands/auth-commands.cpp: Display errors from the InfPostAuthenticationError domain properly instead of a generic "unknown error". 2009-12-23 Armin Burgmeier * code/core/folder.hpp: * code/core/folder.cpp: Added get_document(). * code/commands/file-tasks/task-save-all.cpp (run): Use it, instead of (wrongly) iterating the folder's documents by itself, fixing "Save All". Bug #519. 2009-12-19 Armin Burgmeier * configure.ac: Post-release bump to 0.4.94, require libinfinity-0.5. * README: Update dependencies list. 2009-12-19 Armin Burgmeier * === Released 0.4.93 === * README: * NEWS: Update for release. 2009-12-19 Armin Burgmeier * code/core/browser.cpp (compare_func): Don't use result when it is uninitialized. 2009-12-19 Armin Burgmeier * configure.ac: * Makefile.am: Don't require gnome-doc-utils do be available, build without documentation if they are not, such as on Windows. 2009-12-19 Armin Burgmeier * code/dialogs/preferences-dialog.cpp: Don't add GTK_SOURCE_DRAW_SPACES_NBSP when showing flags since this does not exist in GtkSourceView 2.4.0 yet (which we require). We may it add later when we bump the GtkSourceView dependency. 2009-12-19 Armin Burgmeier * code/dialogs/password-dialog.hpp: * code/dialogs/connection-dialog.hpp: Include , to fix the build with gtkmm 2.12. 2009-12-19 Armin Burgmeier * code/core/browser.cpp: Sort top-level items by name. 2009-12-18 Armin Burgmeier * help/C/gobby.xml: Mention Shift+Ctrl+C shortcut for color reset. 2009-12-18 Armin Burgmeier * code/core/header.hpp: * code/core/header.cpp: Added a reset user color item to the view menu. * code/commands/view-commands.hpp: * code/commands/view-commands.cpp: Added corresponding functionality, using inf_text_gtk_buffer_show_user_colors(). Bug #211. 2009-12-16 Armin Burgmeier * Makefile.am: Added gobby-0.5.desktop.in to EXTRA_DIST. * help/C/gobby.xml: Added dummy items for referenced sections, so that the XML validates. This fixes make distcheck. 2009-12-16 Armin Burgmeier * Makefile.am: Don't install the .desktop file on Windows. 2009-12-15 Armin Burgmeier * code/dialogs/password-dialog.cpp: Fix spacings. 2009-12-15 Benjamin Herr * code/commands/file-commands.hpp: * code/commands/file-commands.cpp: * code/core/header.hpp: * code/core/header.cpp: * code/dialogs/Makefile.am: Added a File menu action to connect to a server, equivalent to the existing Direct Connection entry. 2009-12-15 Benjamin Herr * code/commands/Makefile.am: * code/commands/auth-commands.hpp: * code/commands/auth-commands.cpp: * code/core/browser.hpp: * code/core/browser.cpp: * code/dialogs/Makefile.am: * code/dialogs/password-dialog.hpp: * code/dialogs/password-dialog.cpp: * code/window.hpp: * code/window.cpp: Added support for SASL PLAIN authentication, prompting the user for a password upon connection. 2009-12-15 Benjamin Herr * configure.ac: Enable optional AM_SILENT_RULES. 2009-12-14 Armin Burgmeier * README: Update IRC channel, updated dependencies. 2009-12-14 Armin Burgmeier * code/commands/browser-context-commands.cpp (on_populate_popup): Don't crash when right-clicking on a browser item whose connection is currently being established. 2009-12-14 Armin Burgmeier * code/commands/browser-commands.cpp (on_notify_status): Close network connection when server does not send initial welcome message. 2009-12-10 Benjamin Herr * code/commands/browser-context-commands.cpp: Do not try to create context menu popup for directories that are not in working order. Fixes a crash when rightclicking disconnected browser entries. 2009-12-10 Benjamin Herr * code/core/browser.cpp: Use new inf_tcp_connection_new() function instead of manually creating a GObject. 2009-12-07 Armin Burgmeier * code/commands/browser-commands.hpp: * code/commands/browser-commands.cpp: Simplified the code a bit using the new InfcBrowser "status" property. 2009-12-05 Armin Burgmeier * code/core/textundogrouping.hpp: * code/core/textundogrouping.cpp: * code/core/Makefile.am: Added a thin wrapper around InfTextUndoGrouping which also encloses GtkTextBuffer's user actions into an undo group. * code/core/textsessionview.hpp: * code/core/textsessionview.cpp: Instantiate an undo group when an active user is set. * code/commands/edit-commands.cpp: Undo multiple requests according to the document's undo grouping. 2009-12-03 Gabríel A. Pétursson * code/commands/help-commands.cpp: Added translator credits. 2009-12-03 Gabríel A. Pétursson * code/dialogs/find-dialog.cpp: Fixed a spelling error. 2009-12-02 Gabríel A. Pétursson * code/window.cpp: * code/core/statusbar.hpp: * code/core/statusbar.cpp: Do not show the statusbar's grip handle while the window is maximized. 2009-12-02 Armin Burgmeier * code/commands/edit-commands.cpp: Adapt to another libinfinity API change: inf_adopted_session_undo() and inf_adopted_session_redo() have a new guint parameter. 2009-12-01 Armin Burgmeier * code/core/chattablabel.hpp: * code/core/chattablabel.cpp: * code/core/Makefile.am: Added a tab label for the chat tabs. * code/core/folder.cpp: Make use of it for new chat sessions. 2009-12-01 Armin Burgmeier * code/core/tablabel.hpp: * code/core/tablabel.cpp: Removed all text-specific functionality from TabLabel. * code/core/texttablabel.hpp: * code/core/texttablabel.cpp: * code/core/Makefile.am: Readded it to TextTagTabel which derives from TabLabel. * code/core/folder.cpp: Create a TextTabLabel for text documents. 2009-12-01 Gabríel A. Pétursson * code/core/statusbar.cpp: Do not display documents' status on the status bar when there are no documents open. 2009-12-01 Gabríel A. Pétursson * code/core/statusbar.hpp: * code/core/statusbar.cpp: Display the overwrite status on the status bar. 2009-11-30 Armin Burgmeier * code/core/noteplugin.cpp: * code/operations/operation-open.cpp: Adapt to recent API change in libinfinity: inf_text_session_new() and InfcNotePlugin's session_new() now take a InfSessionStatus parameter. 2009-11-30 Armin Burgmeier * code/commands/folder-commands.cpp (constructor): Fixed a comparison of signed vs. unsigned compiler warning. 2009-11-30 Armin Burgmeier * code/commands/subscription-commands.cpp (on_notify_connection): Also reset the active user for chat sessions. This prevents a crash when changing to a chat session tab which belongs to a closed chat session. 2009-11-21 Armin Burgmeier * code/core/sessionview.hpp: * code/core/sessionview.cpp: * code/core/chatsessionview.hpp: * code/core/chatsessionview.cpp: * code/core/textsessionview.hpp: * code/core/textsessionview.cpp: Moved get_active_user and the active-user-changed signal to the base class. * code/commands/folder-commands.hpp: * code/commands/folder-commands.cpp: Make this work with chat sessions. * code/dialogs/find-dialog.hpp: * code/dialogs/find-dialog.cpp: * code/commands/edit-commands.hpp: * code/commands/edit-commands.cpp: Adapt for changed active-user-changed signal signature. * code/window.hpp: * code/window.cpp: Renamed commands member variables to have _commands as suffix, not as prefix, and added a folder commands for the chat folder. 2009-11-21 Philipp Kern * help/C/gobby.xml: document Editor settings a bit more 2009-11-21 Philipp Kern * code/dialogs/preferences-dialog.cpp: fix en_UK-ism 2009-11-21 Philipp Kern * help/C/gobby.xml: add shortcuts 2009-11-17 Philipp Kern * help/C/gobby.xml: point to the new IRC channel on Freenode 2009-11-17 Armin Burgmeier * code/window.hpp: * code/window.cpp: Switch to text when chat pane is hidden while it had focus, and give it focus if it is shown and nothing else has focus already. 2009-11-17 Armin Burgmeier * code/core/chatsessionview.hpp: Added get_chat(). * code/window.hpp: * code/window.cpp: Added Ctrl+M and Ctrl+Shift+M shortcuts to easily jump between chat and document. 2009-11-17 Armin Burgmeier * code/core/closableframe.hpp: * code/core/closableframe.cpp: Add set_allow_visible(). * code/core/preferences.hpp: * code/core/preferences.cpp: Added settings for chat visibility and chat userlist visibility and width. * code/core/folder.cpp: Use different preference settings for document userlist visibility and chat userlist visibility. * code/core/iconmanager.hpp: * code/core/iconmanager.cpp: Added stock chat icon. * code/core/header.hpp: * code/core/header.cpp: Added "View Chat" and "View Chat User List" menu items and actions. * code/commands/view-commands.hpp: * code/commands/view-commands.cpp: Implemented functionality for the new actions. * code/window.hpp: * code/window.cpp: Pass chat frame and folder to view-commands. 2009-11-17 Armin Burgmeier * code/util/color.hpp: * code/util/color.cpp: Fixed return type of rgb_to_hsv() and hsv_to_rgb(). 2009-11-15 Armin Burgmeier * code/core/userlist.hpp: * code/core/userlist.cpp: Added set_show_disconnected(). * code/core/sessionuserview.hpp: * code/core/sessionuserview.cpp: Added a show_disconnected parameter in the constructor. * code/core/folder.cpp: Don't show disconnected users for chat sessions. 2009-11-15 Gabríel A. Pétursson * code/commands/help-commands.cpp: Updated the about dialog. 2009-11-11 Benjamin Herr * code/core/textsessionview.hpp: * code/core/textsessionview.bpp: On style change, use new libinfinity functionality to adjust user colour saturation/value. The formulas used might not be optimal, so there is room for improvement. 2009-11-10 Benjamin Herr * code/core/statusbar.cpp: Manually add a "Close" button to the status bar message dialog because RESPONSE_CLOSE seems to add a "Cancel" button instead for some people (Gabríel). 2009-11-10 Gabríel A. Pétursson * code/commands/browser-context-commands.hpp: * code/commands/browser-context-commands.cpp: Fixed an assertion error. 2009-11-09 Benjamin Herr , Armin Burgmeier * code/core/statusbar.hpp: * code/core/statusbar.cpp: Readded timeout mechanism into status bar message functions. * code/dialogs/find-dialog.cpp: Readded timeout for status bar messages so that they would actually disappear at some point. 2009-11-09 Benjamin Herr , Armin Burgmeier * code/core/statusbar.cpp: Changed "OK" back to "Close" in status bar error message popup dialog. 2009-11-09 Benjamin Herr , Armin Burgmeier * code/core/statusbar.cpp: Made status bar error message popup dialog non-modal. 2009-11-09 Gabríel A. Pétursson , Armin Burgmeier * code/core/preferences.hpp: * code/core/preferences.cpp: Added scheme_id preference option to appearance. * code/core/textsessionview.hpp: * code/core/textsessionview.cpp: Set GtkSourceView style scheme according to selected scheme ID. * code/dialogs/preferences-dialog.hpp: * code/dialogs/preferences-dialog.cpp: Add a list to choose one's favoured style scheme to the appearance tab. 2009-11-09 Benjamin Herr * code/core/statusbar.cpp: * code/core/statusbar.hpp: Add hide_message that only removes a message widget without removing the (then-null) pointer from the m_list. hide_message can be called multiple times, thus avoiding the crash when an info message was removed twice. 2009-11-09 Benjamin Herr * code/core/statusbar.cpp: * code/core/statusbar.hpp: Minor refactoring to the status bar message change. Also made more stuff a detail of StatusBar::Message. 2009-11-08 Armin Burgmeier * code/commands/browser-commands.hpp: * code/commands/browser-commands.cpp: Initiate a subscription to a server's chat upon connection. * code/commands/subscription-commands.hpp: * code/commands/subscription-commands.cpp: Create a ChatSessionView in the bottom pane in case of a chat subscription. * code/commands/user-join-commands.cpp: Do a chat user join for chat sessions. * code/core/folder.hpp: * code/core/folder.cpp: Added a hide_single_tab option. * code/window.cpp: Adapt to changed folder and browser-commands constructors. 2009-11-08 Armin Burgmeier * code/commands/subscription-commands.hpp: * code/commands/subscription-commands.cpp: New class handling session subscriptions. * code/commands/synchronization-commands.hpp: * code/commands/synchronization-commands.cpp: New class handling session synchronization. * code/commands/user-join-commands.hpp: * code/commands/user-join-commands.cpp: New class handling user join. * code/commands/browser-commands.hpp: * code/commands/browser-commands.cpp: Removed the functionality that has been moved to the classes mentioned above. * code/commands/Makfile.am: Add the new files to the build. * code/window.hpp: * code/window.cpp: Instantiante the new classes. 2009-11-08 Armin Burgmeier * code/core/chatsessionview.hpp: * code/core/chatsessionview.cpp: Added a SessionView-deriving class to show a chat session. * code/core/Makefile.am: Added the new files to the build. * code/core/folder.hpp: * code/core/folder.cpp: Added add_chat_session, renamed add_document to add_text_session. * code/commands/browser-commands.cpp: Use add_text_session instead of add_document. * code/window.hpp: * code/window.cpp: Added a bottom pane for the chat. 2009-10-25 Armin Burgmeier * code/core/textsessionview.hpp: * code/core/textsessionview.cpp: Added TextSessionView, a SessionView-deriving class showing a InfTextSession. * code/core/docwindow.hpp: * code/core/docwindow.cpp: Removed. * code/core/Makefile.am: Adapted the build. * code/core/sessionview.hpp: * code/core/sessionview.cpp: Added path & hostname to SessionView. * code/core/folder.hpp: * code/core/folder.cpp: * code/core/statusbar.hpp: * code/core/statusbar.cpp: * code/core/tablabel.hpp: * code/core/tablabel.cpp: * code/core/titlebar.hpp: * code/core/titlebar.cpp: * code/core/userlist.cpp: * code/dialogs/find-dialog.hpp: * code/dialogs/find-dialog.cpp: * code/dialogs/goto-dialog.hpp: * code/dialogs/goto-dialog.cpp: * code/operations/operation-export-html.hpp: * code/operations/operation-export-html.cpp: * code/operations/operation-save.hpp: * code/operations/operation-save.cpp: * code/operations/operations.hpp: * code/operations/operations.cpp: * code/commands/autosave-commands.hpp: * code/commands/autosave-commands.cpp: * code/commands/browser-commands.cpp: * code/commands/edit-commands.hpp: * code/commands/edit-commands.cpp: * code/commands/file-commands.hpp: * code/commands/file-commands.cpp: * code/commands/folder-commands.hpp: * code/commands/folder-commands.cpp: * code/commands/view-commands.hpp: * code/commands/view-commands.cpp: * code/commands/file-tasks/task-export-html.hpp: * code/commands/file-tasks/task-export-html.cpp: * code/commands/file-tasks/task-save-all.hpp: * code/commands/file-tasks/task-save-all.cpp: * code/commands/file-tasks/task-save.hpp: * code/commands/file-tasks/task-save.cpp: * code/window.cpp: Adapt for the DocWindow->TextSessionView API change. 2009-10-18 Armin Burgmeier * code/core/sessionview.hpp: * code/core/sessionview.cpp: Added SessionView base class which will replace DocWindow soon. * code/core/sessionuserview.hpp: * code/core/sessionuserview.cpp: Added SessionUserView, a wrapper around SessionView with a userlist next to it. * code/core/Makefile.am: Added the new files to the build. 2009-10-23 Armin Burgmeier * code/core/userlist.hpp: * code/core/userlist.cpp: Made UserList work with non-InfText users. * code/core/docwindow.cpp: Only pass InfUserTable to the userlist, not the whole session. 2009-11-09 Gabríel A. Pétursson * code/commands/browser-commands.cpp: * code/commands/file-tasks/task-open.cpp: * code/core/browser.cpp: * code/core/statusbar.cpp: * code/core/statusbar.hpp: * code/dialogs/find-dialog.cpp: * code/operations/operation-delete.cpp: * code/operations/operation-export-html.cpp: * code/operations/operation-new.cpp: * code/operations/operation-open-multiple.cpp: * code/operations/operation-open.cpp: * code/operations/operation-save.cpp: Minor refactoring. Added detailed status bar error messages. 2009-11-07 Armin Burgmeier * code/commands/browser-context-commands.cpp (on_open_response): Use OperationOpenMultiple instead of mulitple OperationOpens, so that the documents are opened one after the other, not all at once. 2009-11-07 Gabríel A. Pétursson * code/commands/browser-context-commands.cpp: * code/commands/file-tasks/task-open-file.hpp: * code/commands/file-tasks/task-open-file.cpp: Added the ability to upload multiple files simultaneously. 2009-11-07 Armin Burgmeier * AUTHORS: Updated. 2009-11-07 Gabríel A. Pétursson * code/commands/file-commands.cpp: * code/core/browser.hpp: * code/core/browser.cpp: Alphabetical sorting of directory and file names. 2009-11-06 Armin Burgmeier * code/commands/folder-commands.cpp: Avoid a crash if the connection goes down before the activation timeout fired, i.e. right after changing a tab. 2009-11-01 Armin Burgmeier * configure.ac: Require glibmm-2.4 >= 2.18.0 and giomm-2.4 >= 2.18.0 to make sure overwriting files works when saving. See also bug #471. 2009-11-01 Benjamin Herr * code/core/preferences.hpp: * code/core/preferences.cpp: Added view.whitespace_display option. * code/dialogs/preferences-dialog.hpp: * code/dialogs/preferences-dialog.cpp: Added a corresponding widget to the View pane in the preferences dialog. * code/core/docwindow.hpp: * code/core/docwindow.cpp: Honor the setting. * configure.ac: Require gtksourceview-2.0 >= 2.4 since gtk_source_view_set_draw_spaces() is available only since this version. 2009-10-31 Armin Burgmeier * code/Makefile.am: Pass both public and private icon paths to the code. * code/core/iconmanager.cpp: Add both to the icon search path. This fixes lookup of the application icon if gobby is installed in a non-standard prefix. 2009-10-26 Armin Burgmeier * code/core/userlist.cpp (sort_func): Sort the user list case-insensitively. 2009-10-26 Armin Burgmeier * code/operations/operation-open.cpp (constructor): Also disable GtkSourceView's Undo for sync'ed-in sessions. Otherwise the user was able to press Ctrl+Z in a newly opened document to trigger GtkSourceView (global) Undo when local group Undo is not available (such as right after document creation). 2009-10-26 Armin Burgmeier * code/commands/browser-commands.cpp (on_subscribe_session): Use the remote-hostname of the InfXmppConnection of the browser instead of the root entry name of the browser model as hostname passed to the DocWindow. This is currently used in the exported HTML's footer. 2009-10-25 Armin Burgmeier , Benjamin Herr * code/operations/operation-export-html.hpp: * code/operations/operation-export-html.cpp: * code/operations/Makefile.am: Added an operation which exports a document to a XHTML document. * code/operations/operations.hpp: * code/operations/operations.cpp: Added export_html() functio. * code/core/header.hpp: * code/core/header.cpp: Added a menu entry for exporting a document to HTML. * code/core/folder.hpp: * code/core/folder.cpp: * code/core/docwindow.hpp: * code/core/docwindow.cpp: * code/commands/browser-commands.cpp: Store path on remote host and its hostname in the DocWindow. * code/commands/file-tasks/task-export-html.hpp: * code/commands/file-tasks/task-export-html.cpp: * code/commands/file-tasks/Makefile.am: Added a task for HTML export showing a file chooser dialog for the user to select a location to export to. * code/commands/file-commands.hpp: * code/commands/file-commands.cpp: Start the task when the user activates the corresponding action defined in Header. 2009-10-24 Armin Burgmeier * icons/hicolor/scalable/status/user-color-indicator.svg: Removed blur, so that rsvg renders it correctly. * icons/hicolor/scalable/Makefile.am: * icons/hicolor/48x48/Makefile.am: * icons/hicolor/48x48/status/Makefile.am: * icons/hicolor/scalable/status/Makefile.am: * configure.ac: Added the new item to the build system. * code/util/color.hpp: * code/util/color.cpp: Added public rgb_to_hsv() and hsv_to_rgb() functions. * code/core/iconmanager.hpp: * code/core/iconmanager.cpp: Added a stock item for the user color indicator. * code/core/userlist.cpp: Show the user color indicator for the user color instead of a boring monochromatic square. 2009-10-24 Benjamin Herr * icons/hicolor/48x48/status/user-color-indicator.png: * icons/hicolor/scalable/status/user-color-indicator.svg: Added fancier icon to display the user colors in the user list. Not actually implemented. 2009-10-06 Armin Burgmeier * code/core/docwindow.cpp: Restore the "highlight matching brackets" option correctly from the preferences. Bug #470. 2009-09-14 Armin Burgmeier * code/commands/file-tasks/task-open-multiple.hpp: Added an include to fix the build. Bug #469. 2009-09-09 Armin Burgmeier * code/window.cpp (on_message_received): Don't leak the uris vector when an exception is thrown. 2009-09-09 Benjamin Herr * code/window.cpp: * code/window.hpp: * code/main.cpp: Also send hostnames given with --connect to an already running instance of gobby (via libunique). 2009-09-08 Benjamin Herr * code/core/browser.hpp: * code/core/browser.cpp: * code/window.hpp: * code/window.cpp: * code/main.cpp: Added --connect=HOSTNAME command line flag to connect to the given hostnames on startup. 2009-08-30 Armin Burgmeier * configure.ac: Require glib-2.18, as replacing existing files while saving does not work with lower versions. * README: Added the new dependency to the README. 2009-08-30 Armin Burgmeier * README: Updated the text, parts of it were still from when we used darcs (Nicolás Alvarez). 2009-08-29 Armin Burgmeier * update-potfiles: Fixed path of the desktop file, and use --binary-file=without-matches instead of a checking for the string 'matches', so that it also works in non-english environments (Nicolás Alvarez). 2009-06-05 Philipp Kern * gobby-0.5.desktop.in: fix icon to not specify the extension, which is discouraged by the icon theme specification 2009-06-03 Armin Burgmeier * code/core/header.cpp: Replace localized section string by a numerical ID for the action names of the various language sections, to prevent a crash when starting Gobby on a Japanese system. Based on a patch by Takahiro Sunaga. 2009-05-26 Armin Burgmeier * code/core/browser.hpp: * code/core/browser.cpp: Changed the HistoryEntry to a HistoryComboBoxEntry, so that we have a dropdown list for recently used hosts. Bug #451. 2009-05-17 Philipp Kern * help/C/gobby.xml: ported content from the old readme to the help file 2009-05-16 Armin Burgmeier * code/commands/file-tasks/task-open.hpp: Include to make sure Gio::File is known. * code/commands/file-tasks/task-open.cpp: Removed an unused variable. 2009-05-16 Armin Burgmeier * docs/: Removed. This was outdated anyway. It should be updated and merged into the new DocBook help in help/. See also #448. 2009-05-16 Armin Burgmeier * Makefile.am: Don't define EXTRA_DIST twice. 2009-05-16 Armin Burgmeier * help/C/gobby.xml: Fixed Gobby command line invocation instruction: The executable is called gobby-0.5, not gobby. 2009-05-16 Armin Burgmeier * code/core/tablabel.cpp: Use gdk_color_to_string instead of Gdk::Color::to_string so that Gobby continues to compile with gtkmm 2.12. Bug #447 (Philipp Kern). 2009-05-12 Philipp Kern * code/dialogs/initial-dialog.cpp: match menuchoice style with manual 2009-05-12 Philipp Kern * configure.ac: get rid of WITH_GNOME, as it is currently unused 2009-05-12 Philipp Kern * autogen.sh: let autogen fail if some command is not available or returns with a failure 2009-05-11 Philipp Kern * code/core/header.cpp: use F1 for HelpContents, instead of the stock Ctrl-H 2009-05-11 Philipp Kern * code/core/header.hpp: * code/core/header.cpp: add HelpContents action * code/commands/help-commands.hpp: * code/commands/help-commands.cpp: invoke help through gtk_show_uri 2009-05-10 Philipp Kern * help/C/gobby.xml: initial manual draft, still pretty empty * help/Makefile.am: * Makefile.am: * autogen.sh: * configure.ac: use gnome-doc-utils as specified in their manual * help/C/figures/main_window.png: * help/C/figures/preferences_appearance.png: * help/C/figures/preferences_editor.png: * help/C/figures/preferences_security.png: * help/C/figures/preferences_user.png: * help/C/figures/preferences_view.png: add an initial set of screenshots (main window and preference panes) 2009-05-10 Philipp Kern * contrib/gobby-0.5.desktop.in: moved to the toplevel * Makefile.am: install the .desktop file unconditionally (i.e. not only WITH_GNOME) * contrib/*: removed 2009-05-03 Armin Burgmeier , Benjamin Herr * configure.ac: Added a --with-unique configure option, require unique-1.0 if set. * code/core/nodewatch.hpp: * code/core/nodewatch.cpp: Accept a const InfcBrowserIter, and changed the signature of get_browser_iter() to return the BrowserIter instead of setting a reference parameter. * code/operations/operation-new.cpp: * code/operations/operation-new.hpp: * code/operations/operation-open.cpp: * code/operations/operation-open.hpp: * code/operations/operation-delete.cpp: * code/operations/operation-delete.hpp: Accept a const InfcBrowserIter in the constructor. * code/operations/operation-open-multiple.hpp: * code/operations/operation-open-multiple.cpp: Added an operation which opens multiple files into the same directory. This is nothing which can't be achieved by creating multiple OperationOpen operations, but it creates the documents one-after-the-other, and therefore does not clutter the statusbar, plus it queries the display name of a file automatically to use as document name, if no document name is given explicitely. * code/operations/operations.hpp: * code/operations/operations.cpp: Accept a const InfcBrowserIter for most operations, added the create_documents() method which creates an OperationOpenMultiple. * code/commands/file-commands.hpp: Make set_task() public. We should later make a separate class for managing the file tasks. * code/dialogs/document-location-dialog.hpp: * code/dialogs/document-location-dialog.cpp: Added a multiple document mode to load multiple files. This basically hides the document name entry. * code/commands/file-tasks/task-new.cpp: * code/commands/file-tasks/task-open.cpp: Explicitely set single document mode on the document location dialog. * code/commands/file-tasks/task-open-multiple.hpp: * code/commands/file-tasks/task-open-multiple.cpp: Added a new task to open multiple files. This shows a document location dialog in multiple document mode and launches an OperationOpenMultiple when the user is done with the dialog. * code/commands/file-tasks/task-save-all.cpp: Added a TODO comment about splitting parts of this into an OperationSaveAll. * code/window.hpp: * code/window.cpp: Take command line arguments in the constructor, and open documents passed on the command line using a TaskOpenMultiple. If unique support is enabled, then react on incoming messages and activate the application window, or open files received in a message. * code/main.cpp: Added a --new-instance command line option. If not set and compiled with unique support, and if another instance is already running, then send a message to the running instance and exit. * Makefile.am: * code/Makefile.am: * code/util/Makefile.am: * code/core/Makefile.am: * code/dialogs/Makefile.am: * code/operations/Makefile.am: * code/commands/Makefile.am: * code/commands/file-tasks/Makefile.am: Added compiler and linker flags for unique, added the new files to the build. * code/commands/autosave-commands.cpp: Fixed two compiler warnings. 2009-05-01 Armin Burgmeier * code/core/nodewatch.hpp: * code/core/nodewatch.cpp: Removed the model from NodeWatch, instead connect to browser's connection's notify::status to detect disconnection. * code/commands/browser-context-commands.cpp: Adapt. 2008-05-01 Armin Burgmeier * gobby-0.5.xpm: Added a 32x32 XPM of the gobby icon. * Makefile.am: Distribute it. 2009-04-28 Benjamin Herr * code/commands/file-tasks/task-open.cpp: Do not delay reporting errors in Gobby::TaskOpen::run() anymore, since signal_finished will already be connected to. 2009-04-27 Armin Burgmeier * code/dialogs/document-location-dialog.cpp: Removed operator== for two GtkTextIters, as it is not used anymore. We are forced to compare TextPaths anyway. 2009-04-27 Armin Burgmeier * code/commands/file-tasks/task-save.cpp: Initialize m_running to false in constructor, and set m_running to true in run(). 2009-04-27 Benjamin Herr * code/commands/file-commands.cpp: * code/commands/file-commands.hpp: * code/commands/file-tasks/task-new.cpp: * code/commands/file-tasks/task-new.hpp: * code/commands/file-tasks/task-open-file.cpp: * code/commands/file-tasks/task-open-file.hpp: * code/commands/file-tasks/task-open-location.cpp: * code/commands/file-tasks/task-open-location.hpp: * code/commands/file-tasks/task-open.cpp: * code/commands/file-tasks/task-open.hpp: * code/commands/file-tasks/task-save-all.cpp: * code/commands/file-tasks/task-save-all.hpp: * code/commands/file-tasks/task-save.cpp: * code/commands/file-tasks/task-save.hpp: Split most of all Task constructors into a separate run() member function that is called by FileCommands::set_task after resetting its current task. This ensures that a new task only gets to mess with stuff after the old one's destructor has been run. 2009-04-26 Armin Burgmeier * README: * configure.ac: Post-release bump to 0.4.93, require libfinity-0.4. 2009-04-26 Armin Burgmeier * === Released 0.4.92 === * README: * NEWS: Update for release. 2009-04-25 Armin Burgmeier * code/core/tablabel.hpp: * code/core/tablabel.cpp: Added a fallback chain for the dot character if the current font doesn't support the pencil glyph. 2009-04-24 Armin Burgmeier * code/main.cpp: Changed locale lookup directory on Windows from lib/locale to share/locale. 2009-04-24 Armin Burgmeier * configure.ac: Changed PACKAGE name back to gobby. * icons/HighContrastLargePrint/48x48/actions/Makefile.am: * icons/HighContrastLargePrint/scalable/actions/Makefile.am: * icons/HighContrastLargePrintInverse/48x48/actions/Makefile.am: * icons/HighContrastLargePrintInverse/scalable/actions/Makefile.am: * icons/hicolor/48x48/actions/Makefile.am: * icons/hicolor/scalable/actions/Makefile.am: * code/core/Makefile.am: Use $(datadir)/gobby-0.5 instead of $(pkgdatadir), so we still install the private icons into a separate directory. 2009-04-22 Benjamin Herr * code/core/tablabel.hpp: * code/core/tablabel.cpp: Display pencil icons in user hue for each user that has edited a document since it was last viewed (Bug #66 by Mattis Manzel). 2009-04-20 Benjamin Herr * code/commands/file-tasks/task-new.cpp: Removed spurious semicolon. 2009-04-20 Armin Burgmeier * code/core/browser.cpp: * code/core/documentinfostorage.cpp: * code/dialogs/open-location-dialog.cpp: * code/main.cpp: * code/util/file.cpp: * code/util/file.hpp: * configure.ac: Store config in Glib::get_user_config_dir() everywhere instead of only on Win32 (Bug #437 by Cristian Klein). 2009-04-20 Armin Burgmeier * configure.ac: Adapt to libinfinity becoming parallel-installable. 2009-02-28 Armin Burgmeier * code/operations/operation-save.cpp: When saving files, don't write almost every line twice if the first line is empty. 2009-02-26 Armin Burgmeier * code/util/resolv.cpp: Added include to fix the build on Free BSD. Bug #431. Patch by Romain Tartière. 2009-02-14 Armin Burgmeier * code/util/config.hpp: * code/util/config.cpp: Added ParentEntry::has_value(). * code/core/preferences.cpp: Added /etc/ssl/certs/ca-certificates.crt as default value for the trust-file, if the file exists. 2009-02-03 Armin Burgmeier * code/operations/operation-save.cpp: Make sure terminating newline characters are saved correctly. 2009-02-02 Armin Burgmeier * pixmaps/: Removed the pixmaps directory. The pixmaps are now installed as icons, to respect theme settings. * contrib/artwork/: Removed as well, since all artwork is now contained in icons/ anyway. * contrib/Makefile.am: * Makefile.am: Adapt for the removal of the above directories. * icons/hicolor/48x48/actions/chat.png: * icons/hicolor/48x48/actions/document-list.png: * icons/hicolor/48x48/actions/user-list.png: * icons/hicolor/48x48/actions/Makefile.am: * icons/hicolor/48x48/Makefile.am: * icons/hicolor/scalable/actions/chat.svg: * icons/hicolor/scalable/actions/document-list.svg: * icons/hicolor/scalable/actions/user-list.svg: * icons/hicolor/scalable/actions/Makefile.am: * icons/hicolor/scalable/Makefile.am: Added previous pixmaps as icons, so they are themeable. * icons/HighContrastLargePrintInverse/48x48/actions/chat.png: * icons/HighContrastLargePrintInverse/48x48/actions/document-list.png: * icons/HighContrastLargePrintInverse/48x48/actions/user-list.png: * icons/HighContrastLargePrintInverse/48x48/actions/Makefile.am: * icons/HighContrastLargePrintInverse/48x48/apps/gobby.png: * icons/HighContrastLargePrintInverse/48x48/Makefile.am: * icons/HighContrastLargePrintInverse/scalable/actions/chat.svg: * icons/HighContrastLargePrintInverse/scalable/actions/document-list.svg: * icons/HighContrastLargePrintInverse/scalable/actions/user-list.svg: * icons/HighContrastLargePrintInverse/scalable/actions/Makefile.am: * icons/HighContrastLargePrintInverse/scalable/apps/gobby.svg: * icons/HighContrastLargePrintInverse/scalable/Makefile.am: Added corresponding HCLPI icons (thanks Tom). * icons/HighContrastLargePrint/48x48/actions/chat.png: * icons/HighContrastLargePrint/48x48/actions/document-list.png: * icons/HighContrastLargePrint/48x48/actions/user-list.png: * icons/HighContrastLargePrint/48x48/actions/Makefile.am: * icons/HighContrastLargePrint/48x48/apps/gobby.png: * icons/HighContrastLargePrint/48x48/apps/Makefile.am: * icons/HighContrastLargePrint/48x48/Makefile.am: * icons/HighContrastLargePrint/scalable/actions/chat.svg: * icons/HighContrastLargePrint/scalable/actions/document-list.svg: * icons/HighContrastLargePrint/scalable/actions/user-list.svg: * icons/HighContrastLargePrint/scalable/actions/Makefile.am: * icons/HighContrastLargePrint/scalable/apps/gobby.svg: * icons/HighContrastLargePrint/scalable/apps/Makefile.am: * icons/HighContrastLargePrint/scalable/Makefile.am: * icons/HighContrastLargePrint/Makefile.am: Added corresponding HCLP icons (again, thanks Tom). * icons/Makefile.am: Descend into HigtContrastLargePrint subdirectory. * code/core/iconmanager.hpp: * code/core/iconmanager.cpp: Load icons from icon name instead of directly from their path, added priate icons directory to icon theme search path. * code/util/Makefile.am: * code/core/Makefile.am: * code/dialogs/Makefile.am: * code/operations/Makefile.am: * code/commands/file-tasks/Makefile.am: * code/commands/Makefile.am: * code/Makefile.am: Removed APPICON_DIR and PIXMAPS_DIR definitions, as these are no longer required. * configure.ac: Generate newly added Makefiles, changed package name to gobby-0.5, so that the private icons end up in their own directory, parallel-installable with the 0.4 line. 2009-02-01 Armin Burgmeier * code/dialogs/find-dialog.hpp: * code/dialogs/goto-dialog.hpp: * code/dialogs/preferences-dialog.hpp: * code/dialogs/entry-dialog.hpp: * code/dialogs/document-location-dialog.hpp: * code/dialogs/open-location-dialog.hpp: * code/dialogs/initial-dialog.hpp: * code/dialogs/find-dialog.cpp: * code/dialogs/goto-dialog.cpp: * code/dialogs/preferences-dialog.cpp: * code/dialogs/entry-dialog.cpp: * code/dialogs/document-location-dialog.cpp: * code/dialogs/open-location-dialog.cpp: * code/dialogs/initial-dialog.cpp: * code/dialogs/Makefile.am: Added hyphens into the file names, to stay consistent with other code files, such as commands/ or operations/. * code/commands/file-tasks/task-open-location.hpp: * code/commands/browser-context-commands.hpp: * code/commands/edit-commands.hpp: * code/commands/file-commands.hpp: * code/window.hpp: Adapt #include directives. 2009-02-01 Armin Burgmeier * code/commands/file-tasks/task-new.hpp: * code/commands/file-tasks/task-open.hpp: * code/commands/file-tasks/task-open-file.hpp: * code/commands/file-tasks/task-open-location.hpp: * code/commands/file-tasks/task-save.hpp: * code/commands/file-tasks/task-save-all.hpp: * code/commands/file-tasks/task-new.cpp: * code/commands/file-tasks/task-open.cpp: * code/commands/file-tasks/task-open-file.cpp: * code/commands/file-tasks/task-open-location.cpp: * code/commands/file-tasks/task-save.cpp: * code/commands/file-tasks/task-save-all.cpp: * code/commands/file-tasks/Makefile.am: Splitted the tasks which were defined in code/commands/file-commands.cpp into multiple files. * code/commands/file-commands.hpp: * code/commands/file-commands.cpp: Adapt accordingly. * code/commands/Makefile.am: Descend into file-tasks subdirectory. * Makefile.am: Link against the new tasks. * configure.ac: Create the new Makefiles. 2009-01-30 Armin Burgmeier * code/util/resolv.cpp: Removed the _WIN32_WINNT #define which is no longer required now that we use for getaddrinfo support. 2009-01-30 Armin Burgmeier * icons/HighContrastLargePrintInverse/48x48/Makefile.am: * icons/HighContrastLargePrintInverse/48x48/apps/Makefile.am: * icons/HighContrastLargePrintInverse/48x48/apps/gobby.png: * icons/HighContrastLargePrintInverse/scalable/Makefile.am: * icons/HighContrastLargePrintInverse/scalable/apps/Makefile.am: * icons/HighContrastLargePrintInverse/scalable/apps/gobby.svg: * icons/hicolor/48x48/Makefile.am: * icons/hicolor/48x48/apps/Makefile.am: * icons/hicolor/48x48/apps/gobby.png: * icons/hicolor/scalable/Makefile.am: * icons/hicolor/scalable/apps/Makefile.am: * icons/hicolor/scalable/apps/gobby.svg: * configure.ac: Added context ("apps") to icons directory structure. 2009-01-30 Armin Burgmeier * code/util/resolv.cpp: Include the header file on Windows to support Windows 2000. Bug #425. 2009-01-16 Armin Burgmeier * code/commands/file-commands.cpp: Don't use Gtk::FileChooser::get_file(), so that we don't require gtkmm 2.14. 2009-01-16 Armin Burgmeier * code/commands/file-commands.cpp: Marked a string for localization. 2009-01-15 Armin Burgmeier * all source files: Added 2009 to copyright years. 2009-01-04 Armin Burgmeier * configure.ac: Post-release bump to 0.4.92. 2009-01-04 Armin Burgmeier * === Released 0.4.91 === * NEWS: Update for release. 2009-01-04 Armin Burgmeier * code/core/window.cpp: Re-enable shortcuts for Undo and Redo. These have been accidentally disabled when pasting text in the "Direct Connection" entry has been fixed. 2009-01-04 Armin Burgmeier * code/core/docwindow.hpp: * code/core/docwindow.cpp: Show a tooltip when hovering over text, saying what user wrote the hovered text. 2009-01-04 Armin Burgmeier * code/core/window.hpp: * code/core/window.cpp: Fixed pasting text into the direct connection entry when having open a document. Before, the text was pasted into the document even though the entry was focused. We use the same workaround as gedit. 2009-01-04 Armin Burgmeier * code/core/folder.cpp: Re-enable Ctrl+Alt+PgDown/Ctrl+Alt+PgUp to cycle between tabs. * code/core/docwindow.cpp: Added a TODO comment about using a single UserList widget for all documents. 2009-01-04 Armin Burgmeier * code/core/statusbar.hpp: * code/core/statusbar.cpp: Added an invalid_handle() function, so other code can keep around invalid message handles, and fixed invalid memory access when a document was removed. * code/commands/browser-context-commands.cpp: Added a TODO comment about using file-tasks for common operations. * code/commands/file-commands.cpp: Query file info asynchronously, to avoid UI hangs when opening unresponsive remote files. 2009-01-03 Armin Burgmeier * code/util/historyentry.hpp: * code/util/historyentry.cpp: Added HistoryComboBoxEntry, which allows to select the history entries via a combo box. * code/dialogs/openlocationdialog.hpp: * code/dialogs/openlocationdialog.cpp: Use a HistoryComboBoxEntry instead of a simple GtkEntry. * code/dialogs/entrydialog.cpp: Don't use Gtk::Entry::get_text_length() since this is available only since gtkmm 2.14, but we require only 2.12. 2009-01-03 Armin Burgmeier * code/dialogs/openlocationdialog.hpp: * code/dialogs/openlocationdialog.cpp: * code/dialogs/Makefile.am: Added a dialog which queries the user for an URI to open. * code/core/header.hpp: * code/core/header.cpp: Added an "Open Location" menu item. * code/commands/file-commands.hpp: * code/commands/file-commands.cpp: Handle the "Open Location" menu item, fixed deinitialization order. * code/window.cpp: Pass statusbar to file commands. * code/operations/operation-open.cpp: Added error handling for the initial read_async operation. 2009-01-02 Armin Burgmeier * code/util/historyentry.hpp: * code/util/historyentry.cpp: * code/util/Makefile.am: Added a HistoryEntry class which allows scrolling through past entries in a GtkEntry, optionally saving and restoring the history from/to disk. * code/core/browser.hpp: * code/core/browser.cpp: Use a history entry for the hostname entry. 2008-12-31 Armin Burgmeier * code/core/preferences.hpp: * code/core/preferences.cpp: Added autosave_enabled and autosave_interval properties. * code/dialogs/preferencesdialog.hpp: * code/dialogs/preferencesdialog.cpp: Added the two preferences to the user interface. * code/commands/autosave-commands.hpp: * code/commands/autosave-commands.cpp: * code/commands/Makefile.am: Implemented autosave. * code/window.hpp: * code/window.cpp: Instantiate AutosaveCommands. * code/commands/file-commands.cpp: Added a TODO comment about defaulting to CRLF on Windows. 2008-12-31 Armin Burgmeier * code/operations/operations.hpp: * code/operations/operations.cpp: Added a begin_save_operation signal, and added a boolean parameter to base operation's finished signal which indicates whether the operation was performed successfully or not. Removed the remove() function, and added finish() and fail() instead. * code/operations/operation-open.hpp: Derive from sigc::trackable. * code/operations/operation-save.hpp: * code/operations/operation-save.cpp: Added get_document(), get_start_time() and derive from sigc::trackable, adapt to finish() and fail(). * code/operations/operation-new.cpp: * code/operations/operation-open.cpp: * code/operations/operation-delete.cpp: Adapt to finish() and fail(). 2008-12-30 Armin Burgmeier * code/operations/operations.hpp: * code/operations/operations.cpp: Added signal_finished to the operation base class, and the various functions creating operations now return them. * code/operations/operation-save.cpp: Fixed a typo in a comment. 2008-12-29 Armin Burgmeier * code/window.hpp: * code/window.cpp: Changed (de)initialization order so that browser is freed after folder. This is required to avoid a warning when an InfSession holds a reference to a connection (such as during synchronization) and Gobby is closed. 2008-12-28 Armin Burgmeier * configure.ac: Require libinfinity >= 0.2. 2008-12-28 Armin Burgmeier * code/core/browser.cpp: * code/core/noteplugin.cpp: * code/operations/operation-open.cpp: Adapt to libinfinity's new communication API. 2008-12-23 Philipp Kern * configure.ac: separate infinote pkg-config from those determining if all libraries needed for Gobby's user interface are present, allowing easier and separate overrides of them * Makefile.am: * code/Makefile.am: * code/commands/Makefile.am: * code/core/Makefile.am: * code/dialogs/Makefile.am: * code/operations/Makefile.am: * code/util/Makefile.am: use AM_CPPFLAGS for everything instead of specialized per-target CPPFLAGS entries 2008-12-23 Philipp Kern * code/Makefile.am: * code/commands/Makefile.am: * code/core/Makefile.am: * code/dialogs/Makefile.am: * code/operations/Makefile.am: * code/util/Makefile.am: Include top-level CFLAGS. 2008-12-19 Armin Burgmeier * po/fr.po: Changed application name to "Editeur collaboratif Gobby" to meet French Gnome standard. 2008-12-19 Armin Burgmeier * po/fr.po: Added translation for the desktop file (Bug #415, Pascal Kreyer). 2008-12-19 Armin Burgmeier * po/de.po: Removed dash from application name, as other GNOME programs do. 2008-12-17 Armin Burgmeier * icons/hicolor/48x48/gobby-0.5.png: * icons/hicolor/48x48/Makefile.am: * icons/hicolor/Makefile.am: Added fixed-size version of gobby icon. * icons/HighContrastLargePrintInverse/48x48/gobby-0.5.png: * icons/HighContrastLargePrintInverse/48x48/Makefile.am: * icons/hicolor/Makefile.am: Added fixed-size version of HCLPI gobby icon. * configure.ac: Generate the new Makefiles. 2008-12-17 Armin Burgmeier * contrib/artwork/gobby.svg: Centered the gobby icon into the document. * code/core/iconmanager.hpp: * code/core/iconmanager.cpp: Removed the gobby icon pixbuf. * code/dialogs/initialdialog.cpp: * code/commands/help-commands.cpp: * code/main.cpp: Lookup the gobby icon by its icon name. * pixmaps/gobby-0.5.png: Deleted. * icons/hicolor/scalable/gobby-0.5.svg: Added scalable gobby icon. * icons/hicolor/scalable/Makefile.am: Install it into a proper location. * icons/hicolor/Makefile.am: Run update-icon-cache on hicolor theme after (un)intall. * icons/HighContrastLargePrintInverse/scalable/gobby-0.5.svg: Added scalable gobby icon for HCLPI theme (Thomas Glatt, Bug #413). * icons/HighContrastLargePrintInverse/scalable/Makefile.am: Install it. * icons/HighContrastLargePrintInverse/Makefile.am: Run update-icon-cache on HighContrastLargePrintInverse after (un)install. * Makefile.am: Decend into the icons/ subdir. * pixmaps/Makefile.am: Don't install gobby-0.5.png to share/pixmaps anymore. * configure.ac: Generate the new Makefiles. 2008-11-23 Armin Burgmeier * configure.ac: Post-release bump to 0.4.91. 2008-11-23 Armin Burgmeier * contrib/Makefile.am: Always add gobby-0.5.desktop.in to the distribution. 2008-11-23 Armin Burgmeier * Makefile.am: Add a dummy C++ file to nondistributed sources, to cause C++ linking. Bug #399, Markus Wanjura. 2008-11-23 Armin Burgmeier * code/core/browser.cpp: Added include, required on Mac OS X. Bug #399, Markus Wanjura. 2008-11-23 Armin Burgmeier * code/util/i18n.hpp: Added definition for N_. * code/operations/operation-open.cpp: Made 8bit encoding used for auto detection translatable, so that locales with other default 8bit encodings than iso-8859-1 get better results for auto detection. 2008-11-23 Armin Burgmeier * contrib/gobby-0.5.desktop: Removed. * contrib/gobby-0.5.desktop.in: Added, marking name and comment for translation. * contrib/Makefile.am: Generate contrib/gobby-0.5.desktop from contrib/gobby-0.5.desktop.in via intltool. This allows the desktop file to be translated via po files. Bug #396, based on a patch from Takao Fujiwara. * autogen.sh: Run intltoolize. * configure.ac: Require intltool. * update-potfiles: Added contrib/gobby-0.5.desktop.in to list of files scanned for translatable strings. 2008-11-09 Armin Burgmeier * code/commands/edit-commands.cpp: Scroll to cursor after cut or paste. 2008-11-05 Armin Burgmeier * code/commands/edit-commands.cpp: Added a (hopefully) temporary hack to set the cursor position to the place where a Undo/Redo has occurred. This stopped to work with the latest changes in libinfinity (which in turn fix other caret stuff, such as no longer moving the caret around on block indent/unindent, or allowing to paste text over a selected area). This can be properly implemented as soon as libinfinity supports caret-aware requests. 2008-10-18 Armin Burgmeier * code/core/browser.cpp: * code/core/header.cpp: Use standard capitalization for control labels. Bug #223 (Matthew Paul Thomas). 2008-10-18 Armin Burgmeier * code/main.cpp: Set localedir relative to Gobby executable on Windows, so i18n is properly relocatable. 2008-10-18 Armin Burgmeier * === Released 0.4.90 === 2008-10-17 Armin Burgmeier * contrib/gobby-0.5.desktop: Fixed icon file name. 2008-10-16 Armin Burgmeier * code/Makefile.am: * code/commands/Makefile.am: * code/core/Makefile.am: * code/dialogs/Makefile.am: * code/operations/Makefile.am: * code/util/Makefile.am: Fix `make distcheck' by using -I$(top_srcdir) instead of a relative path such as -I.. Also, changed pixmapdir to $(datadir)/pixmaps/gobby-0.5. * pixmaps/Makefile.am: * pixmaps/gobby-0.5.png: Moved from pixmaps/gobby.png. * contrib/Makefile.am: * contrib/gobby-0.5.desktop: Moved from gobby.desktop. * configure.ac: Changed GETTEXT_PACKAGE from gobby to gobby05. * code/core/iconmanager.cpp: Load gobby-0.5.png for the Gobby logo instead of gobby.png. 2008-10-16 Armin Burgmeier * NEWS: Update for release. 2008-10-16 Armin Burgmeier * all source files: Changed description in GPL header since Gobby is no longer libobby driven. Also changed Copyright holder to me and Copyright date to 2008 since 99% of the code was written by me in 2008. 2008-10-16 Armin Burgmeier * contrib/gobby.desktop: Launch the correct executable, added a "(0.5)" to the description to differentiate it from a previous parallel-installed version. 2008-10-16 Armin Burgmeier * code/commands/browser-commands.cpp (on_synchronization_failed): Remove the entry from the session map directly instead of waiting for session closure, otherwise the error message is overwritten with a useless (and incorrent) 'The connection to the publisher has been lost' one. 2008-10-15 Armin Burgmeier * code/core/browser.hpp: * code/core/browser.cpp: Adapt to libinfinity API change, INFINOTE_HAVE_AVAHI has been renamed to LIBINFINITY_HAVE_AVAHI. 2008-10-15 Armin Burgmeier * code/core/Makefile.am: Added appicondir and pixmapdir back, so that installed pixmaps can be found. * code/util/resolv.cpp: Set all fields in getaddrinfo hint, otherwise the Win32 implementation of getaddrinfo produces an error. * code/core/browser.cpp: Commented-out the device name to device index translation for %dev syntax on Windows. It won't be available for now. * code/core/iconmanager.cpp: Don't load save-all.svg since GTK+ on Win32 has no SVG loader by defualt. Also, locate pixbufs using the non-deprecated g_win32_get_package_installation_directory_of_module function. * code/core/statusbar.cpp: Added code that undefs ERROR, because this is used in an enum, and seems to be defined somewhere in a Windows header. * code/dialogs/preferencesdialog.cpp: Don't set current folder of host directory file chooser (which is not shown currently anyway), because this could produce an error message if the directory does not exist. * code/operations/operation-open.cpp: * code/operations/operation-save.cpp: Use the C g_iconv API instead of Glib::IConv::iconv, because iconv is a define to libiconv on Windows, but Glib::IConv::libiconv does not exist. * Makefile.am: Fixed linking order, link to stdc++ and ws2_32 on Windows. * win32/gobby.rc: Fixed path to gobby.res file. 2008-10-15 Armin Burgmeier * po/LINGUAS: Added LINGUAS file that lists all languages. This seems to be required for `make dist'. * configure.ac: Use the po/LINGUAS file to set the ALL_LINGUAS variable. 2008-10-14 Armin Burgmeier * code/main.cpp: Call inf_init() instead of initializing gnutls and the GObject type system directly. 2008-10-14 Armin Burgmeier * code/commands/browser-commands.cpp: Fixed a typo in a string. 2008-10-14 Armin Burgmeier * code/commands/folder-commands.cpp: Only wake inactive users when the corresponding document is the currently active one. This fixes a crash when text has was selected in an inactive document and the selection is erased by selecting something elsewhere. 2008-10-13 Armin Burgmeier * code/core/titlebar.hpp: * code/core/titlebar.cpp: * code/core/Makefile.am: Added a new class that handles what is displayed in the titel bar of the Gobby window. * code/window.hpp: * code/window.cpp: Instantiate a TitleBar. * code/core/documentinfostorage.hpp: Added a superflous TODO comment. 2008-10-13 Armin Burgmeier * code/commands/browser-commands.hpp: * code/commands/browser-commands.cpp: * code/operations/operation-open.cpp: * code/operations/operation-save.cpp: Set the modified flag upon opening or saving a document correctly. * code/core/tablabel.hpp: * code/core/tablabel.cpp: Show the modify flag in the tab. 2008-10-12 Armin Burgmeier * code/operations/operation-open.cpp: Fixed double unref of IO object. * code/core/browser.cpp: Added a TODO comment about initial root node expansion for direct connections. 2008-10-11 Armin Burgmeier * code/core/tablabel.hpp: * code/core/tablabel.cpp: * code/core/Makefile.am: Added TabLabel to this extra source file, make color of tab label red on activity, and grey when the document is being synchronized or the connection has been lost. * code/core/tablabel.cpp: Removed the TabLabel class in the anonymous namespace, use the one introduced above instead. 2008-10-10 Armin Burgmeier * code/core/filechooser.cpp: Allow selecting non-local files in Gobby's filechooser. * code/commands/file-commands.cpp: * code/commands/browser-context-commands.cpp: Query the display name when opening a file, to use as document title. FileChooser::get_filename() does not work for non-local files. 2008-10-09 Armin Burgmeier * code/core/iconmanager.cpp: Removed the Save All icon from display, because it does not fit to the "Save" icon for Toolbar and Menu sizes. * code/core/header.cpp: Remove Save All icon from the toolbar. Items without icons look ugly and the toolbar, and there is a shortcut for quick access. 2008-10-09 Armin Burgmeier * code/util/file.hpp: * code/util/file.cpp: Added the config_filename() function. * code/core/browser.cpp: * code/core/documentinfostorage.cpp: * code/main.cpp: Make use of that function to access config files. * code/window.cpp: Give initial focus to browser. 2008-10-09 Armin Burgmeier * configure.ac: Renamed the `OSX' define to `PLATFORM_OSX', and added `PLATFORM_OSX_NATIVE' when running with the quartz GDK target. * code/core/header.cpp: Adapt, only use ige-mac-integration when running natively on OS X. 2008-10-09 Armin Burgmeier * code/: Moved from src/. * code/commands/browser-commands.hpp: * code/commands/browser-context-commands.hpp: * code/commands/edit-commands.hpp: * code/commands/file-commands.hpp: * code/commands/folder-commands.hpp: * code/commands/help-commands.hpp: * code/commands/view-commands.hpp: * code/core/browser.hpp: * code/core/closableframe.hpp: * code/core/documentinfostorage.hpp: * code/core/docwindow.hpp: * code/core/filechooser.hpp: * code/core/folder.hpp: * code/core/header.hpp: * code/core/huebutton.hpp: * code/core/iconmanager.hpp: * code/core/nodewatch.hpp: * code/core/noteplugin.hpp: * code/core/preferences.hpp: * code/core/statusbar.hpp: * code/core/userlist.hpp: * code/dialogs/documentlocationdialog.hpp: * code/dialogs/entrydialog.hpp: * code/dialogs/finddialog.hpp: * code/dialogs/gotodialog.hpp: * code/dialogs/initialdialog.hpp: * code/dialogs/preferencesdialog.hpp: * code/operations/operation-delete.hpp: * code/operations/operation-new.hpp: * code/operations/operation-open.hpp: * code/operations/operation-save.hpp: * code/operations/operations.hpp: * code/util/closebutton.hpp: * code/util/color.hpp: * code/util/config.hpp: * code/util/defaultaccumulator.hpp: * code/util/file.hpp: * code/util/i18n.hpp: * code/util/resolv.hpp: * code/util/serialize.hpp: * code/features.hpp: * code/window.hpp: Moved from inc/. * code/commands/Makefile.am: * code/operations/Makefile.am: * code/dialogs/Makefile.am: * code/core/Makefile.am: * code/util/Makefile.am: * code/Makefile.am: * Makefile.am: * configure.ac: Adapt to the new build structure. 2008-10-09 Armin Burgmeier * src/Makefile.am: Rename the gobby binary to gobby-0.5, to support parallel installation with gobby 0.4. 2008-10-09 Armin Burgmeier * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Added the scroll_to_cursor_position() function. * src/commands/edit-commands.cpp: Scroll to cursor position on Undo or Redo. 2008-10-08 Armin Burgmeier * src/core/folder.cpp: Emit document_changed with NULL document after the last document has been removed, not before, so get_current_document() yields the correct result. * inc/commands/edit-commands.hpp: * src/commands/edit-commands.cpp: Don't rely on m_current_document being valid until on_document_changed() was called. * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Make "New" and "Open" actions insensitive when there is no entry in the Document Browser. 2008-10-08 Armin Burgmeier * src/core/browser.cpp: Adapt to infinote API changes. 2008-10-01 Armin Burgmeier * src/util/config.cpp: Renamed the root config from gobby_config to gobby-config. 2008-09-30 Armin Burgmeier * src/commands/folder-commands.cpp: Added another assertion to be able to better track another problem with users becoming active without having the document selected in the notebook. 2008-09-22 Armin Burgmeier * src/commands/folder-commands.cpp: Flush pending user requests before setting user inactive, to avoid the user becoming active again due to a delayed caret movement. 2008-09-22 Armin Burgmeier * src/core/preferences.cpp: Fixed writing the insert-tabs-instead-of-spaces option to the config file. 2008-09-22 Armin Burgmeier * src/core/huebutton.cpp: Fix button ordering. 2008-09-21 Armin Burgmeier * src/main.cpp: Display version information on -v. 2008-09-21 Armin Burgmeier * src/core/docwindow.cpp: Make sure author tags have lower priority than GtkSourceView tags. 2008-09-21 Armin Burgmeier * src/window.cpp: Set main window role. 2008-09-21 Armin Burgmeier * inc/dialogs/preferenceswindow.hpp: Don't notify option if the newly selected option is the same as the already selected one. 2008-09-21 Armin Burgmeier * src/commands/file-fommands.cpp: Use document title as initial filename for Save dialog if no URI is available in info storage. 2008-09-21 Armin Burgmeier * src/commands/view-commands.cpp: Set "View Userlist" insensitive if no document is open. 2008-09-21 Armin Burgmeier * inc/core/browser.hpp: * src/core/browser.cpp: Support hostname:port%device syntax for direct connections, to be able to establish IPv6 link-local connections directly. 2008-09-18 Armin Burgmeier * update-potfiles: Added a small script to generate the po/POTFILES.in. It is simple, but enough for our needs. 2008-09-18 Armin Burgmeier * src/commands/browser-commands.cpp: * src/commands/browser-context-commands.cpp: * src/core/browser.cpp: * src/core/header.cpp: * src/operations/operation-delete.cpp: * src/operations/operation-new.cpp: * src/operations/operation-open.cpp: * src/operations/operation-save.cpp: Changed all "…" character in strings to "...". Gedit does the same, and xgettext does not accept … without complaining. Translators can still choose to translate "..." to "…". 2008-09-18 Armin Burgmeier * inc/util/encoding.hpp: * inc/core/encodingselector.hpp: * inc/dragdrop.hpp: * src/util/encoding.cpp: * src/core/encodingselector.cpp: * src/dragdrop.cpp: Removed. These remained from Gobby 0.4 but were never used in 0.5. * inc/util/Makefile.am: * inc/core/Makefile.am: * inc/Makefile.am: * src/util/Makefile.am: * src/core/Makefile.am: * src/Makefile.am: Removed the files from the build. * inc/window.hpp: Removed includes including those files. 2008-09-18 Armin Burgmeier * inc/dialogs/preferencesdialogs.hpp: * src/dialogs/preferencesdialogs.cpp: Added a security page. * inc/core/browser.hpp: * src/core/browser.cpp: Set discovery's security policy and certificate manager's trust file from preferences. 2008-09-18 Armin Burgmeier * src/core/preferencesdialog.cpp: Use a Gtk::SizeGroup to align the "User name" and "User color" labels correctly. 2008-09-18 Armin Burgmeier * configure.ac: Added a new define, GOBBY_CONFIGDIR, that specifies where Gobby shall store it's configuration files (preferences, known documents, known hosts) * inc/core/preferences.hpp: * src/core/preferences.cpp: Added a security section with trust file and security-policy entries, changed serialise to serialize for consistency. * src/window.cpp: Call preferences.serialize instead of serialise. * src/core/browser.cpp: Use the security policy to create new XMPP connections. Honor GOBBY_CONFIGDIR for known hosts file. * src/core/documentinfostorage: Honor GOBBY_CONFIGDIR for known documents file. * src/main.cpp: Honor GOBBY_CONFIGDIR for config file. 2008-09-17 Armin Burgmeier * src/Makefile.am: * src/commands/Makefile.am: * src/core/Makefile.am: * src/dialogs/Makefile.am: * src/operations/Makefile.am: * src/util/Makefile.am: Removed LOCALE_DIR definition from compiler command line. * configure.ac: Use AM_GLIB_DEFINE_LOCALEDIR instead. * src/main.cpp: Use GOBBY_LOCALEDIR instead of LOCALE_DIR. 2008-09-17 Armin Burgmeier * inc/core/browser.hpp: * src/core/browser.cpp: Instantiate a InfGtkCertificateManager, to handle server certificates. 2008-09-17 Armin Burgmeier * src/commands/view-commands.cpp: Fix usage of an uninitialized variable. 2008-09-13 Armin Burgmeier * src/core/browser.cpp: Adapt to infinote API change. 2008-09-11 Armin Burgmeier * inc/core/closableframe.hpp: * src/core/closableframe.cpp: Added title and icon for the frame. * src/core/docwindow.cpp: * src/window.cpp: Set title and icon for userlist and browser. 2008-09-11 Armin Burgmeier * pixmaps/chat.png: Removed. * pixmaps/Makefile.am: Removed chat.png from distribution. * inc/core/iconmanager.hpp: * src/core/iconmanager.cpp: Removed chat icon. * src/commands/help-commands.cpp: Added Thomas Glatt to artists because he designed the Gobby logo. 2008-09-11 Armin Burgmeier * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Added a boolean parameter to set_info() that specifies whether the info box can be closed by the user. * src/commands/browser-commands.cpp: Make persistent error infos closable, but not temporary synchronization infos. 2008-09-11 Armin Burgmeier * inc/core/closableframe.hpp: * src/core/closableframe.cpp: Added a new widget, derived from Gtk::Frame, that shows a close button in the upper right corner, for the frame to be closed. * inc/core/Makefile.am: * src/core/Makefile.am: Added the new files to the build. * inc/core/preferences.hpp: * src/core/preferences.cpp: Added show_browser and show_userlist options. * inc/window.hpp: * src/window.cpp: * src/core/docwindow.cpp: Use a ClosableFrame for the browser and userlist, respectively. * src/core/browser.cpp: Removed the border_width. It is now applied by the ClosableFrame. If border_width is desired in certain situations, then it can still be called from elsewhere. * inc/core/header.hpp: * src/core/header.cpp: Added "Show Document Browser" and "Show Userlist" items to the View menu. * inc/commands/view-commands.hpp: * src/commands/view-commands.cpp: Implemented functionality for these (by setting the preference options). 2008-09-11 Armin Burgmeier * inc/util/closebutton.hpp: * src/util/closebutton.cpp: Added CloseButton class that provides an as-small-as-possible GtkButton with a close icon on it. * inc/util/Makefile.am: * src/util/Makefile.am: Added new files to the build. * src/core/folder.cpp: Use CloseButton on the tabs. 2008-09-10 Armin Burgmeier * src/core/userlist.cpp: Fixed userlist sorting, sometimes unavailable users were shown above available ones. 2008-09-10 Armin Burgmeier * src/commands/folder-commands.cpp: Fix a warning when the connection to the server has been lost while being subscribed to a document. 2008-09-10 Armin Burgmeier * src/window.cpp: Keep browser pane at a fixed width. 2008-09-10 Armin Burgmeier * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Fixed an endless loop when the userlist is forcefully resized. 2008-09-10 Armin Burgmeier * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Change user color in running session on preferences color change. 2008-09-10 Armin Burgmeier * src/dialogs/preferencesdialog.cpp: Use notify::color instead of signal_color_set on ColorButton, because ColorButton::set_color (as used by HueButton) odes not emit the latter. 2008-09-10 Armin Burgmeier * inc/core/userlist.hpp: * src/core/userlist.cpp: Watch notify::hue instead of notify::color on InfTextUser for user color changes. InfTextUser::color does not exist. 2008-09-09 Armin Burgmeier * inc/core/huebutton.hpp: * src/core/huebutton.cpp: Added HueButton widget which is similar to Gtk::ColorButton but launches a InfTextGtkHueChooser instead of a GtkColorSelector on click. * inc/core/Makefile.am: * src/core/Makefile.am: Add the new files to the build. * inc/dialogs/initialdialog.hpp: * inc/dialogs/preferencesdialog.hpp: * src/dialogs/initialdialog.cpp: * src/dialogs/preferencesdialog.cpp: Use HueButton instead of ColorButton for user color selection. 2008-09-08 Armin Burgmeier * inc/core/header.hpp: * src/core/header.cpp: Added FileClose action and menu item. * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Handle it. 2008-09-08 Armin Burgmeier * src/core/folder.cpp: Make tabs reorderable. 2008-09-08 Armin Burgmeier * inc/core/preferences.hpp: * src/core/preferences.cpp: Added userlist_width property. * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Honor it by making sure the userlist always has the width specified in the preferences, and update preferences when the user resizes the user list. * inc/core/folder.hpp: * src/core/folder.cpp: Make Preferences nonconst, so DocWindow can store the current userlist width in it. * src/window.cpp: Increase default window size to 800x600. 2008-09-08 Armin Burgmeier * inc/util/color.hpp: * src/util/color.cpp: Added hue_to_gdk_color(). * inc/core/userlist.hpp: * src/core/userlist.cpp: Added a new widget that displays all users in a session. * inc/core/Makefile.am: * src/core/Makefile.am: Added new files to the build. * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Show userlist in a right pane. * src/core/folder.cpp (remove_document): Keep the session alive until the corresponding page has been removed from the folder. 2008-09-07 Armin Burgmeier * inc/commands/folder-commands.hpp: * src/commands/folder-commands.cpp: Added FolderCommands class, setting user status according to currently activated document in folder. * src/core/folder.cpp: Make sure signal_document_added is emitted before the first emission of signal_document_changed for the new document. * inc/window.hpp: * src/window.cpp: Instantiate FolderCommands. * inc/commands/Makefile.am: * src/commands/Makefile.am: Added new files to the build. 2008-08-27 Armin Burgmeier * src/commands/browser-commands.cpp: Set initial status depending on whether the document is currently displayed in the folder. * src/operations/operation-open.cpp: Set initial status of user in the document to inactive. 2008-08-26 Armin Burgmeier * src/core/noteplugin.cpp: Adapt to libinfinity API change (user_data parameter to InfcNotePlugin callback functions). 2008-08-25 Armin Burgmeier * src/operations/operation-open.cpp: Fixed a typo in a comment. 2008-08-24 Armin Burgmeier * inc/core/nodewatch.hpp: * src/core/nodewatch.cpp: Added a class that watches a node in a InfcBrowser and emits a signal when it is removed. * inc/dialogs/entrydialog.hpp: * src/dialogs/entrydialog.cpp: Added a class that shows a dialog with an entry, to prompt the user for a string to enter. * inc/operations/operation-delete.hpp: * src/operations/operation-delete.cpp: Added an operation that deletes a node. * inc/core/browser.hpp: * src/core/browser.cpp: Added get_view(). * inc/operations/operation-new.hpp: * src/operations/operation-new.cpp: Allow this to create a directory, via a boolean parameter. * inc/operations/operations.hpp: * src/operations/operations.cpp: Added delete_node() and create_directory(). * src/core/documentinfostorage.cpp (on_node_removed): Don't require the removed node to be in our map. * inc/commands/browser-context-commands.hpp: * src/commands/browser-context-commands.cpp: Added a class that shows a context menu for the left browser pane, allowing the user to create or remove nodes. * inc/window.hpp: * src/window.cpp: Instantiate a BrowserContextCommands object. * inc/core/Makefile.am: * inc/dialogs/Makefile.am: * inc/operations/Makefile.am: * inc/commands/Makefile.am: * src/core/Makefile.am: * src/dialogs/Makefile.am: * src/operations/Makefile.am: * src/commands/Makefile.am: Added the new files to the build. 2008-08-24 Armin Burgmeier * inc/core/filechooser.hpp: * src/core/filechooser.cpp: Added a new class that manages a "current folder uri" which specifies at which location the filechooser has been used the last time. This is used as default location for newly opened file chooser dialogs. * inc/core/Makefile.am: * src/core/Makefile.am: Add the new files to the build. * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Use this when showing open or save dialogs. * inc/window.hpp: * src/window.cpp: Instantiate a FileChooser, pass to FileCommands. 2008-08-24 Armin Burgmeier * inc/core/browser.hpp: * src/core/browser.cpp: Added the get_selected() and set_selected() methods, using the new inf_gtk_browser_view_set_selected(). * src/commands/browser-commands.cpp: When subscribing to a session, then change the BrowserView selection to the corresponding note, and give focus to the DocWindow, so the user can start typing immediately. 2008-08-14 Armin Burgmeier * src/commands/browser-commands.cpp: Removed an obsolete TODO item. * inc/core/folder.hpp: * src/core/folder.cpp: Automatically record every session to ~/.infinote-records, to be able to reproduce errors that occur somewhere in the session. 2008-08-13 Armin Burgmeier * src/core/header.cpp: Don't show hidden languages for syntax highlighting. 2008-07-23 Armin Burgmeier * src/commands/view-commands.cpp: Block signal_language_changed while closing last document, to avoid a crash in the handler 2008-07-16 Armin Burgmeier * inc/core/header.hpp: * src/core/header.cpp: Added lookup_language_action() to lookup a languagu action by the GtkSourceLanguage. * inc/commands/view-commands.hpp: * src/commands/view-commands.cpp: Switch the language of the current document if the user chooses another language in the menu, and make the menu reflect the language for the current document. * inc/commands/help-commands.hpp: * src/commands/help-commands.cpp: Implemented the About option. * inc/commands/Makefile.am: * src/commands/Makefile.am: Added help-commands to the build. * inc/window.hpp: * src/window.cpp: Instantiate HelpCommands. 2008-07-14 Armin Burgmeier * configure.in: Require giomm 2.16.4 since this contains a bugfix that allows overwriting files when saving. 2008-07-12 Armin Burgmeier * inc/commands/browser-commands.hpp: * src/commands/browser-commands.cpp: Join with an alternative user name if the preferred one is already in use. 2008-07-11 Armin Burgmeier * inc/commands/view-commands.hpp: * src/commands/view-commands.cpp: Implemented View Toolbar and View Statusbar. * inc/commands/Makefile.am: * src/commands/Makefile.am: Add the new files to the build. * inc/core/folder.hpp: * src/core/folder.cpp: Added a const version of get_current_document(). * inc/core/statusbar.hpp: * src/core/statusbar.cpp: Added display of current line and column. * src/core/header.cpp: Hide toolbar initially if the show_toolbar preference is not set. * inc/window.hpp: * src/window.cpp: Instantiate ViewCommands. 2008-07-04 Armin Burgmeier * inc/core/toolwindow.hpp: * src/core/toolwindow.cpp: Removed. ToolWindow is no longer used. * inc/core/Makefile.am: * src/core/Makefile.am: Adjusted build files. 2008-07-04 Armin Burgmeier * inc/dialogs/gotodialog.hpp: * src/dialogs/gotodialog.cpp: Redesigned GotoDialog, and limit maximum line number to the line count of the current document. * inc/commands/edit-commands.hpp: * src/commands/edit-commands.cpp: Show GotoDialog and PreferencesDialog when the corresponding actions have been activated. * inc/dialogs/finddialog.hpp: * src/dialogs/finddialog.cpp: Added a destructor disconnecting from the active_user_changed signal of the current document. * src/core/header.cpp: Added mnemonics for a few menu items. * src/util/file.cpp: Fixed endless recursion in create_directory_with_parents(). 2008-07-03 Armin Burgmeier * inc/commands/edit-commands.hpp: * src/commands/edit-commands.cpp: Take a StatusBar in constructor to hand to find dialog, implemented find and replace. * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Changed set_selection paramaters from const Gtk::TextIter& to const GtkTextIter* since we are using the C API of GtkTextBuffer. * src/dialogs/gotodialog.cpp: Adapt to API change in DocWindow. * inc/dialogs/finddialog.hpp: * src/dialogs/finddialog.cpp: Changed FindDialog to better meet the GNOME HIG, added "Wrap around" option, inherit from Gtk::Dialog instead of Gobby::ToolWindow. * src/core/header.cpp: Add a horizontal ellipsis to all menu items that open dialogs. * src/dialogs/initialdialog.cpp: Call Gtk::Dialog constructor with parent instead of default constructor. * src/window.cpp: Pass statusbar to EditCommands. 2008-07-03 Armin Burgmeier * inc/commands/edit-commands.hpp: * src/commands/edit-commands.cpp: Implemented Cut/Copy/Paste functionality. * src/core/folder.cpp: Emit signal_document_changed when the last document is about to be removed before the document has actually been removed, so that signal handlers that still have a reference to the last document can still make use of it. * src/core/header.cpp: Added a shortcut (L) for Save All, as in gedit. 2008-07-02 Armin Burgmeier * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Added the active_user_changed signal and the get_active_user() function. * src/core/header.cpp: Added shortcuts for Undo and Redo. * src/core/noteplugin.cpp: Disable GtkSourceView Undo/Redo system by calling gtk_source_buffer_begin_non_undoable_action() without ever ending that non-undoable action. * inc/commands/edit-commands.hpp: * src/commands/edit-commands.cpp: New class handling the commands in the Edit submenu. For now Undo and Redo are implemented. * inc/window.hpp: * src/window.cpp: Instantiate EditCommands. * inc/commands/Makefile.am: * src/commands/Makefile.am: Added new files to build. 2008-06-29 Armin Burgmeier * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Cleaned up the code a bit, implemented save all. * src/core/folder.cpp: Emit document_changed with NULL argument in case the last document has been removed. 2008-06-28 Armin Burgmeier * pixmaps/save-all.svg: * pixmaps/Makefile.am: Added icon for the save all menu item, contributed by Benjamin Herr * inc/core/iconmanager.hpp: * src/core/iconmanager.cpp: Add it to the icon manager. * src/core/header.cpp: Add it to the menu. * src/commands/file-commands.cpp: Fix a crash when unsubscribing from a session after having opened the file chooser to save a file. 2008-06-28 Armin Burgmeier * inc/core/documentinfostorage.hpp: * src/core/documentinfostorage.cpp: Moved from operations/documentinfostorage.[hc]pp. Also added the get_key() method and added overloads of get_info and set_info that take a key instead of browser and iter. * inc/operations/operation-open.hpp: Fixed include of documentinfostorage.hpp. * inc/operations/operation-save.hpp: * src/operations/operation-save.cpp: Implemented saving of documents. This currently does refuse to overwrite existing files due to a bug in giomm, see http://bugzilla.gnome.org/show_bug.cgi?id=540656. * inc/core/docwindow.hpp: * src/core/docwindow.cpp: Store a storage info key, so that on save the corresponding info can be updated. * inc/core/folder.hpp: * src/core/folder.cpp: Pass a correct storage info key to newly created documents. * inc/commands/browser-commands.hpp: * src/commands/browser-commands.cpp: Pass a storage info key to the folder when a new document is opened because of a new subscription. * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Implemented save and save as functionality. * inc/operations/operations.hpp: * src/operations/operations.cpp: Added save_document(). * src/window.cpp: Pass info storage to browser and file commands. * inc/core/Makefile.am: * inc/operations/Makefile.am: * src/core/Makefile.am: * src/operations/Makefile.am: Add new and moved files to build. 2008-06-28 Armin Burgmeier * inc/commands/browser-commands.hpp: * src/commands/browser-commands.cpp: Set info text in DocWindow and make the document readonly when the connection to the publisher has been lost. * src/core/docwindow.cpp: Allow user to be NULL in set_active_user(). * src/core/folder.cpp: Set icon in tab label when the connection to the document's publisher has been lost. 2008-06-27 Armin Burgmeier * inc/commands/browser-commands.hpp: * src/commands/browser-commands.cpp: Make sure subscription progress is only shown for sessions that are synchronized, not for sync-ins. * inc/core/preferences.hpp: Removed the non-const operator Type& since it allows changing the Properties content without notification. Also added get() in analogy to set(). * inc/operations/operation-open.hpp: * src/operations/operation-open.cpp: Take a Preferences in the constructor, add a user to the session before synchronizing it to the server so that we can start editing the document before the synchronization is complete. * inc/operations/operations.hpp: * src/operations/operations.cpp: * src/window.cpp: Pass the Preferences object to OperationOpen. * src/operations/operation-new.cpp: Automatically Subscribe to newly created documents. 2008-06-27 Armin Burgmeier * inc/commands/browser-commands.hpp: * src/commands/browser-commands.cpp: Watch synchronization and join user for every session subscribed to, not only sessions that have been subscribed to by the BrowserCommands. * src/core/folder.cpp: Fixed a typo in a comment 2008-06-25 Yarek Tyshchenko (Merged from master): * configure.ac: Require ige-mac-integration when Gobby is compiled natively on OS X. * src/core/header.cpp: Integrate the menu bar into the main OS X menu bar. 2008-06-22 Armin Burgmeier * src/operations/documentinfostorage.cpp: Added return value for load_document, fixed storage of "root" node (was in top-level instead of ), * src/operations/operation-open.cpp: Added a TODO comment to remmove memmove. 2008-06-22 Armin Burgmeier * inc/operations/documentinfostorage.hpp: * src/operations/documentinfostorage.cpp: Disconnect from the set-browser signal handler on destruction. 2008-06-21 Armin Burgmeier * inc/util/file.hpp: * src/util/file.cpp: * inc/util/Makefile.am: * src/util/Makefile.am: Added file.hpp/.cpp containing utility functions to deal with the filesystem. Currently, a function that creates a directory and all its parent if necessary is implemented. * inc/util/config.hpp: * src/util/config.cpp: Make use of that function in the destructor. * inc/util/resolv.hpp: Include since we use std::auto_ptr<>. * inc/operations/documentinfostorage.hpp: * src/operations/documentinfostorage.cpp: Added class that stores local information on known documents such as the local location, the encoding and the eol style. * inc/operations/operation-open.hpp: * src/operations/operation-open.cpp: Implemented opening documents from files, via giomm. * inc/operations/Makefile.am: * src/operations/Makefile.am: Add the new source files to the build. * inc/operations/operations.hpp: * src/operations/operations.cpp: Added encoding parameter to create_document(), added DocumentInfoStorage member. * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Added functionlity for the Open menu item. * inc/window.hpp: * src/window.cpp: Instantiate a DocumentInfoStorage, pass to Operations. * src/main.cpp: Initialize giomm. * configure.ac: Added giomm as a dependency. 2008-05-19 Armin Burgmeier * inc/Makefile.am: * inc/operations/Makefile.am: * inc/operations/operation-new.hpp: * inc/operations/operations.hpp: * src/Makefile.am: * src/operations/Makefile.am: * src/operations/operation-new.cpp: * src/operations/operations.cpp: Added Operation subsystem, handling tracking of asynchronous operations. * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Make use of OperationNew to create new documents. * inc/window.hpp: * src/window.cpp: Instantate an Operations object, pass to FileCommands. * configure.ac: * Makefile.am: Create new makefiles, link libgobby-operations.h. 2008-05-18 Armin Burgmeier * inc/core/Makefile.am: * src/core/Makefile.am: * inc/core/noteplugin.hpp: * src/core/noteplugin.cpp: Added text plugin as a public global constant. * src/window.cpp: Adapt. 2008-05-18 Armin Burgmeier * src/dialogs/documentlocationdialog.cpp: Initially refilter the InfGtkBrowserModelFilter, otherwise previously explored nodes are always visible. * src/commands/file-commands.cpp: Adapt to the new infinote API in infc_browser_add_note(). 2008-05-09 Armin Burgmeier * inc/dialogs/documentlocationdialog.hpp: * src/dialogs/documentlocationdialog.cpp: Only allow ACCEPT response when a subdirectory is selected, filter all nodes but subdirectories. * src/commands/file-commands.cpp: Hide DocumentLocationDialog after usage. 2008-05-09 Armin Burgmeier * inc/util/Makefile.am: * inc/util/color.hpp: * inc/util/config.hpp: * inc/util/defaultaccumulator.hpp: * inc/util/encoding.hpp: * inc/util/i18n.hpp: * inc/util/resolv.hpp: * inc/util/serialize.hpp: * inc/core/Makefile.am: * inc/core/browser.hpp: * inc/core/docwindow.hpp: * inc/core/encodingselector.hpp: * inc/core/folder.hpp: * inc/core/header.hpp: * inc/core/iconmanager.hpp: * inc/core/preferences.hpp: * inc/core/statusbar.hpp: * inc/core/toolwindow.hpp: * inc/dialogs/Makefile.am: * inc/dialogs/finddialog.hpp: * inc/dialogs/gotodialog.hpp: * inc/dialogs/initialdialog.hpp: * inc/dialogs/preferencesdialog.hpp: * inc/commands/Makefile.am: * inc/commands/browser-commands.hpp: * inc/window.hpp: * inc/Makefile.am: * src/util/Makefile.am: * src/util/color.cpp: * src/util/config.cpp: * src/util/encoding.cpp: * src/util/i18n.cpp: * src/util/resolv.cpp: * src/util/serialize.cpp: * src/core/Makefile.am: * src/core/browser.cpp: * src/core/docwindow.cpp: * src/core/encodingselector.cpp: * src/core/folder.cpp: * src/core/header.cpp: * src/core/iconmanager.cpp: * src/core/preferences.cpp: * src/core/statusbar.cpp: * src/core/toolwindow.cpp: * src/dialogs/Makefile.am: * src/dialogs/finddialog.cpp: * src/dialogs/gotodialog.cpp: * src/dialogs/initialdialog.cpp: * src/dialogs/preferencesdialog.cpp: * src/commands/Makefile.am: * src/commands/browser-commands.cpp: * src/dragdrop.cpp: * src/main.cpp: * src/window.cpp: * src/Makefile.am: * Makefile.am: * configure.ac: Reordered file hierarchy, fixing includes. * inc/dialogs/documentlocationdialog.hpp: * src/dialogs/documentlocationdialog.cpp: Added a dialog allowing the user to select on which directory and server to create a document. * inc/commands/file-commands.hpp: * src/commands/file-commands.cpp: Added functionality for File/New using the new dialog. 2008-04-20 Armin Burgmeier * inc/browser.hpp: * src/browser.cpp: Adapt to new infinote API by using InfGtkBrowserStore instead of InfGtkBrowserModel. 2008-04-20 Armin Burgmeier * src/browser.cpp: Fixed a format string (%1 instead of %0). 2008-04-13 Armin Burgmeier * inc/docwindow.hpp: * src/docwindow.cpp: Added DocWindow::set_active_user(). * src/folder.cpp: Show icon in the tab representing the current subscription state. * src/commands/browser-commands.cpp: Set active user after user join. 2008-04-13 Armin Burgmeier * inc/commands/browser-commands.hpp: * src/commands/browser-commands.cpp: Track synchronization, perform a user join after synchronization, show error and status messages. * inc/docwindow.hpp: * src/docwindow.cpp: Implemented DocWindow::set_info() and DocWindow::unset_info(). * src/folder.cpp: Changed Folder::lookup_document() to use a PageList and an iterator instead of traversing the list by index. * src/window.cpp: Pass the preferences to the BrowserCommands because it needs to find the name for the user to join. 2008-04-12 Armin Burgmeier * inc/commands/browser-commands.hpp: * inc/commands/Makefile.am * src/commands/browser-commands.cpp: * src/commands/Makefile.am: Added functionality to subscribe to a session. * inc/Makefile.am: * src/Makefile.am: Recurse into the commands subdirectory. * Makefile.am: Link src/commands/libgobby-commands.a * configure.ac: Create inc/commands/Makefile.am and src/commands/Makefile.am. * inc/folder.hpp: * src/folder.cpp: Added switch_to_document(), make close button in tab label look correct. * src/header.cpp: Rename label for save all menu item from "Save all" to "Save All". * src/docwindow.cpp: Make the window non-editable by default. We make it editable later when a local user has joined. * inc/window.hpp: * src/window.cpp: Added BrowserCommands object. 2008-04-12 Armin Burgmeier * contrib/gobby-0.0.20050522.ebuild: * contrib/artwork/chat.svg: * test/test_document.cpp: Removed, these are outdated. * inc/default_accumulator.hpp: * inc/serialize.hpp: * src/serialize.cpp: Added. These are basically copies from net6, but in the Gobby namespace. * inc/i18n.hpp: * src/i18n.cpp: Moved from inc/common.hpp or src/common.cpp, respectively. * inc/application_state.hpp: * inc/buffer_def.hpp: * inc/chat.hpp: * inc/colorsel.hpp: * inc/historyentry.hpp: * inc/document.hpp: * inc/document_settings.hpp: * inc/entrydialog.hpp: * inc/fileentry.hpp: * inc/gselector.hpp: * inc/hostdialog.hpp: * inc/hostprogressdialog.hpp: * inc/ipc.hpp: * inc/joindialog.hpp: * inc/joinprogressdialog.hpp: * inc/logview.hpp: * inc/passworddialog.hpp: * inc/progressdialog.hpp: * inc/regex.hpp: * inc/togglewindow.hpp: * inc/unix.hpp: * src/application_state.cpp: * src/buffer_def.cpp: * src/chat.cpp: * src/colorsel.cpp: * src/document.cpp: * src/document_settings.cpp: * src/entrydialog.cpp: * src/fileentry.cpp: * src/gselector.cpp: * src/historyentry.cpp: * src/hostdialog.cpp: * src/hostprogressdialog.cpp: * src/ipc.cpp: * src/joindialog.cpp: * src/joinprogressdialog.cpp: * src/logview.cpp: * src/passworddialog.cpp: * src/preferencesdialog.cpp: * src/progressdialog.cpp: * src/regex.cpp: * src/togglewindow.cpp: * src/unix.cpp: Removed. They are no longer required for infinote, or at least not in a such way that a complete rewrite would not be easier anyway. * inc/config.hpp: * inc/dragdrop.hpp: * inc/encoding.hpp: * inc/finddialog.hpp: * inc/folder.hpp: * inc/statusbar.hpp: * inc/window.hpp: * src/browser.cpp: * src/config.cpp: * src/dragdrop.cpp: * src/encoding.cpp: * src/encoding_selector.cpp: * src/finddialog.cpp: * src/folder.cpp: * src/gotodialog.cpp: * src/header.cpp: * src/icon.cpp: * src/initialdialog.cpp: * src/main.cpp: * src/resolv.cpp: * src/statusbar.cpp: * src/window.cpp: Removed any occurences of net6/obby stuff, replaced by equivalent functionality if possible. * po/POTFILES.in: Removed source files, added a TODO comment to readd them as soon as the required files are ready. * Makefile.am: * contrib/Makefile.am: * contrib/artwork/Makefile.am: * inc/Makefile.am: * pixmaps/Makefile.am: * src/Makefile.am: * win32/Makefile.am: Hierarchical build instead of only a top-level Makefile.am, so that each Makefile.am is smaller and easier to use. * configure.ac: Remove dependency on net6 and obby. 2008-04-12 Armin Burgmeier * src/preferences.cpp: Changed default value for homeend_smart to false. * inc/resolv.hpp: * src/resolv.cpp: Changed signature of callbacks to include the ResolvHandle. * inc/browser.hpp: * src/browser.cpp: Added resolv map to correctly cancel pending resolvs on destruction. * inc/statusbar.hpp: * src/statusbar.cpp: Correctly remove the timeout connection on destruction of a statusbar message. * inc/folder.hpp: * inc/docwindow.hpp: * src/folder.cpp: * src/docwindow.cpp: Changed Folder and DocWindow to be used with InfTextSession instead of obby::local_document_info. * inc/window.hpp: * src/finddialog.cpp: * src/gotodialog.cpp: * src/window.cpp: Adapted to Folder and DocWindow changes. 2008-03-13 Armin Burgmeier * inc/statusbar.hpp: * src/statusbar.cpp: Removed old functionality, add methods to add and remove status messages. * inc/window.hpp: * inc/window.cpp: Adapt. 2008-03-09 Armin Burgmeier * inc/documentlist.hpp: * inc/userlist.hpp: * src/documentlist.cpp: * src/userlist.cpp: * Makefile.am: Removed. * inc/preferences.hpp: * src/preferences.cpp: Added show_toolbar and show_statusbar preferences. * inc/initialdialog.hpp: Added missing include (gtkmm/image.h). * inc/header.hpp: * src/header.cpp: Redesign menu/toolbar to better match common editors. * inc/window.hpp: * src/folder.cpp: * src/window.cpp: Adapt to above changes, current UI disfunctional. 2008-03-06 Armin Burgmeier * inc/resolv.hpp: * src/resolv.cpp: Code to asynchronously resolve host names. * inc/browser.hpp: * src/browser.cpp: Added Browser class that shows remote directories to browse (via InfGtkBrowserView), and that allows to create direct connections. * inc/window.hpp: * src/window.cpp: Show browser in a sidepane to the left, remove chat. * src/initialdialog.cpp: Set window title. * Makefile.am: Added browser.{h,c}pp and resolv.{h,c}pp * configure.ac: Depend on infinote. 2008-03-03 Armin Burgmeier * inc/initialdialog.hpp: * src/initialdialog.cpp: * Makefile.am: Added an initial welcome dialog. * inc/window.hpp: * src/window.cpp: Show initial dialog the first time gobby is started. 2008-03-03 Armin Burgmeier * inc/preferencesdialog.hpp: * src/preferencesdialog.cpp: Store chosen preferences. * inc/preferences.hpp: Add Preferences::Option::set for convenience. * inc/colorutil.hpp: * src/colorutil.cpp: * Makefile.am: Added colorutil containing some utility functions to handle colors. 2008-03-02 Armin Burgmeier * configure.ac: Require at least gtkmm 2.12, drop gtksourceview1 support, post-branch bump to 0.4.90. * inc/preferences.hpp: * src/preferences.cpp: Removed options not required for infinote, added user preferences page. * inc/preferencesdialog.hpp: * src/preferencesdialog.cpp: Adapted and redesigned preferences dialog to better meet the Gnome HIG. Currently disfunctional. * inc/header.hpp: * inc/folder.hpp: * inc/docwindow.hpp: * inc/window.hpp: * src/header.cpp: * src/folder.cpp: * src/chat.cpp: * src/togglewindow.cpp: * src/docwindow.cpp: * src/window.cpp: Adapt. 2008-01-31 Armin Burgmeier * src/config.cpp: File test before loading XML file, this seems to crash on Windows otherwise. 2008-01-24 Philipp Kern * src/header.cpp: * src/preferences.cpp: * src/preferencesdialog.cpp: * src/unix.cpp: Fix build failures with g++-4.3 (thanks to Matthias Klose) 2008-01-20 Armin Burgmeier * src/preferences.cpp: * src/preferencesdialog.cpp: * src/header.cpp: Don't crash when no GtkSourceView languages are installed. 2008-01-03 Philipp Kern * contrib/gobby.desktop: adhere to the freedesktop.org Desktop Entry Specification v1.0 2008-01-01 Armin Burgmeier * src/preferencesdialog.cpp: Add some spacing to the document management option group. 2008-01-01 Philipp Kern * configure.ac: bump version to 0.4.6 * NEWS: documented the changes 2008-01-01 Philipp Kern * po/pt_BR.po, po/pl.po, po/ko.po: added new translations from Rosetta * po/*.po: translation roundup fetched from Rosetta * configure.ac: add pt_BR, pl and ko 2008-01-01 Philipp Kern * configure.ac: bump obby dependency to 0.4.5 to get IPv6 autodiscovery 2007-12-16 Armin Burgmeier * src/toolwindow.hpp: * src/toolwindow.cpp: Hide on escape. 2007-11-27 Armin Burgmeier * src/docwindow.cpp: Enable indentation-on-tab in gtksourceview1 * configure.in: Require gtksourceview >= 1.8. 2007-10-14 Armin Burgmeier * inc/preferencesdialog.hpp: * src/preferencesdialog.cpp: Don't use the tooltip for the smart home/end option when gtkmm was built without deprecated API. * src/logview.cpp: Replaced scroll_to_mark by scroll_to because the former is deprecated. * src/docwindow.cpp: Fix gtksourceview1 build. 2007-09-30 Benjamin Herr * src/window.cpp: Make sure that the two buttons on the confirmation dialog when exiting gobby with a session running do not have the same mnemonics. 2007-09-20 Philipp Kern * src/ipc.cpp: added unistd.h to the list of includes to ease porting to OpenBSD 2007-09-17 Armin Burgmeier * src/preferencesdialog.cpp: * src/header.cpp: * src/docwindow.cpp: * src/preferences.cpp: Adapted to latest (and final) GtkSourceView2 API. 2007-08-27 Armin Burgmeier * src/historyentry.cpp: Avoid Gtk::Entry::set_text() because it seems to crash on Vista. Use Gtk::Editable::delete_text and Gtk::Editable::insert_text instead. 2007-08-27 Armin Burgmeier * src/window.cpp: Make sure not to try to send an unsubscription request twice. 2007-08-18 Armin Burgmeier * src/icon.cpp: Win32 build fix. 2007-08-18 Philipp Kern * inc/window.hpp: * src/window.cpp: do not close document if `save as' is cancelled [fixes #288] 2007-08-18 Philipp Kern * NEWS: * configure.ac: bump version to 0.4.5 and document the changes 2007-08-12 Armin Burgmeier * src/window.cpp: Set IO channel encoding to "" when saving files because we do the necessary conversion ourselves before saving. This fixes saving non-UTF-8 encoded files. * src/icon.cpp: Convert pixmap paths to UTF-8 on windows, allowing gobby to run inside paths containing non-ASCII characters. * src/preferences.cpp: Include features.hpp for correct gtksourceview2 detection. 2007-08-05 Philipp Kern * Place a `Save' button instead of a plain `OK' button in the `Save file' dialog and set it as the default response. 2007-07-22 Philipp Kern * Fix compilation with GtkSourceView 1 2007-07-22 Philipp Kern * New Swedish translation by Daniel Nylander [fixes #282] 2007-07-09 Philipp Kern * src/main.cpp: bugfix to use IPC by default 2007-07-09 Philipp Kern * inc/joindialog.hpp: * src/joindialog.cpp: add support for IPv6 autodiscovery 2007-07-09 Armin Burgmeier * src/preferencesdialog.cpp: * src/header.cpp: * src/docwindow.cpp: * src/preferences.cpp: Adjusted for gtksourceview2 API changes. 2007-06-16 Philipp Kern * configure.ac: fixed POSIX compliance 2007-06-16 Philipp Kern * po/POTFILES.in: add more source files to be scanned for strings to be translated * po/gobby.pot: update, mainly line numbers * po/ca.po: * po/pt.po: * po/es.po: * po/fr.po: * po/de.po: * po/sv.po: * po/zh_CN.po: translation roundup: new line numbers, some strings changed by Rosetta contributors * configure.ac: * po/it.po: * po/ru.po: new translations imported from Rosetta * NEWS: documented new translations 2007-06-15 Philipp Kern * NEWS: * configure.ac: bump version to 0.4.4 and document the changes * mkinstalldirs: removed from the repository, is symlinked through autogen.sh 2007-06-15 Philipp Kern * src/finddialog.cpp: * src/window.cpp: * src/statusbar.cpp: * src/folder.cpp: * src/document.cpp: * src/preferencesdialog.cpp: * src/main.cpp: * src/header.cpp: * src/docwindow.cpp: * src/preferences.cpp: * inc/window.hpp: * inc/document.hpp: * inc/header.hpp: * inc/docwindow.hpp: * inc/preferences.hpp: * inc/documentlist.hpp: fixed the indentation from two spaces to one tab and removed some cruft 2007-06-13 Philipp Kern * src/chat.cpp: use Gtk::Entry::delete_text(...) instead of Gtk::Entry::set_text(""); the latter crashes on Windows Vista 2007-06-12 Armin Burgmeier * src/documentlist.cpp: fixed a bug related to the document list's selection (clear the selection in obby_start) [fixes #271] 2007-05-27 Armin Burgmeier * inc/sourceview: * src/sourceview: * Makefile.am: Remove hand-coded GtkSourceView wrappers. * configure.ac: Added --with-gtksourceview2 configure option. * src/finddialog.cpp: * src/window.cpp: * src/statusbar.cpp: * src/folder.cpp: * src/document.cpp: * src/preferencesdialog.cpp: * src/main.cpp: * src/header.cpp: * src/docwindow.cpp: * src/preferences.cpp: * src/gotodialog.cpp: * inc/window.hpp: * inc/folder.hpp: * inc/document.hpp: * inc/preferencesdialog.hpp: * inc/header.hpp: * inc/docwindow.hpp: * inc/preferences.hpp: Support GtkSourceview2, use GtkSourceView C API directly. 2007-05-10 Benjamin Herr * inc/documentlist.hpp: * src/documentlist.cpp: sort document list alphabetically 2007-04-23 Philipp Kern * src/togglewindow.cpp: ToggleWindow needs UTILITY hints in any case * src/toolwindow.cpp: use DIALOG unconditionally on every ToolWindow 2007-04-23 Philipp Kern * src/toolwindow.cpp: use DIALOG hint on *nix, UTILITY on Win32 * src/window.cpp: copyright notice renewed 2007-04-16 Armin Burgmeier * src/chat.cpp: Reintroduce user tags in chat which got accidentaly lost in revision [1515]. 2007-04-15 Armin Burgmeier * src/joindialog.cpp: Don't allow selection in the error case, use a single column for both icon and text. Make the dialog resizable. 2007-04-15 Philipp Kern * src/joindialog.cpp: failure handling for exceptions thrown by discover 2007-04-14 Armin Burgmeier * src/joindialog.cpp: Only access the currently selected row to set the content of the host and port entries when there actually is a selected row. 2007-04-14 Armin Burgmeier * inc/joindialog.hpp: * src/joindialog.cpp: Take a obby::zeroconf_base instead of obby::zeroconf, do not install timer when using avahi as zeroconf backend. * inc/window.hpp: * src/window.cpp: Use Glib mainloop for avahi zeroconf backend, otherwise poll it every 1500 milliseconds. 2007-04-14 Philipp Kern * configure.ac, Makefile.am: check for Avahi in obby and link against avahi-glib if Avahi proper is used for Zeroconf support; provide an additional define WITH_AVAHI for usage within the code 2007-04-09 Armin Burgmeier * inc/folder.hpp: * src/folder.cpp: Added a select_document() function that selects the page that shows the given document. * src/userlist.cpp: * src/documentlist.cpp: Make use of it. 2007-04-09 Philipp Kern * src/window.cpp: * inc/documentlist.hpp: * src/documentlist.cpp: allow the same in the document list 2007-04-09 Philipp Kern * inc/window.hpp: * src/window.cpp: pass a folder object to the user list * inc/userlist.hpp: * src/userlist.cpp: doubleclicks on already subscribed documents now cause the document to be selected 2007-04-09 Philipp Kern * configure.ac: bump version to 0.4.3 * NEWS: note down usability improvements in 0.4.3 2007-04-09 Philipp Kern * src/window.cpp: do not show tabs if only one document present [fixes #220] 2007-04-08 Philipp Kern * src/preferencesdialog.cpp: add toolbar setting for "text besides icon" * src/header.cpp: set important flags of the actions according to the sensitivity 2007-04-08 Philipp Kern * src/window.cpp: * src/chat.cpp: set urgency hint on window only when chat widget is visible [fixes #256] 2007-04-07 Philipp Kern * inc/userlist.hpp: * src/userlist.hpp: allow doubleclicks on documents in the userlist to subscribe to them [fixes #225] 2007-04-07 Philipp Kern * inc/document_settings.hpp: signals now pass a non-const LocalDocumentInfo reference * inc/window.hpp: * src/window.cpp: automatically opened tabs should not grab the focus [finally fixes #232] 2007-04-07 Philipp Kern * inc/document_settings.hpp: * src/document_settings.cpp: add a flag whether the document was opened automatically or not 2007-04-02 Philipp Kern * src/window.cpp: * inc/preferences.hpp: * src/preferences.cpp: * inc/preferencesdialog.hpp: * src/preferencesdialog.cpp: add new configuration option to open new remotely-created documents automatically [fixes #232] 2007-04-02 Philipp Kern * src/window.cpp: Mention avahi-daemon in failure message. 2007-03-27 Philipp Kern * src/window.cpp: Output an error to the console if the zeroconf daemon is unavailable instead of displaying an annoying message box. 2007-03-27 Philipp Kern * src/preferences.cpp: Fix some mime types. It seems that they are inconsistent over different distributions, at least the fixed ones are commonly changed. 2007-03-24 Armin Burgmeier * inc/window.hpp: * src/window.cpp: Focus find and goto dialogs always when the corresponding actions are triggered. Also do not load them at startup but as soon as they are required, to improve startup time [fixes #251]. 2007-03-21 Armin Burgmeier * src/chat.cpp: Do not print an incoming message as much times as its number of lines, but only once. 2007-02-25 Armin Burgmeier * src/window.cpp: Open output file to save a document with Glib::IOChannel instead of std::ofstream to get correct conversion of filename encoding from glib. 2007-02-25 Armin Burgmeier * src/ipc.cpp: Define _WIN32_WINNT to get HWND_MESSAGE API. 2007-02-25 Philipp Kern * NEWS, configure.in: Bump version to 0.4.2 and document important changes. 2007-01-02 Philipp Kern Moved GlobalUnlock further downwards (The pointer is only guaranteed to point to the right place within GlobalLock and GlobalUnlock, thus it might point to an invalid memory block. [Michael Walter]) 2006-12-31 Armin Burgmeier Accept absolute file names for IPC [fixes #237] 2006-11-08 Armin Burgmeier Keep viewport position on remote operations 2006-11-04 Armin Burgmeier Allow subscribing by double click on document list 2006-11-04 Armin Burgmeier Libtool stuff 2006-11-04 Armin Burgmeier Do not set modified flag when opening a local file [fixes #214] 2006-10-26 Philipp Kern Put the urgency hint into the preferences dialog 2006-09-05 Philipp Kern MingW compilation fix: windres now detected by autoconf 2006-09-05 Philipp Kern MingW compilation fix 2006-08-27 Philipp Kern Updated ChangeLog for release 2006-08-27 Philipp Kern Bump version to 0.4.1 2006-08-21 Armin Burgmeier Load pixmaps from pixmaps/ if not found in PIXMAPS_DIR 2006-08-21 Philipp Kern Move the PNGs out of contrib/artwork into pixmaps 2006-08-21 Philipp Kern Remove inline pixmaps and use the external graphics in any case 2006-08-17 Philipp Kern Removed Gobby::Atomic, no longer needed 2006-08-17 Philipp Kern Translation roundup 2006-08-17 Philipp Kern Updated the manual page 2006-08-16 Philipp Kern Bump version to 0.4.0rc4 and depend on obby-0.4.0rc4 or higher 2006-08-16 Armin Burgmeier Preselect line in GotoDialog 2006-08-16 Armin Burgmeier Do not allow self-highlighting 2006-08-15 Philipp Kern Updated NEWS 2006-08-14 Philipp Kern Moved the contents of the View menu to Edit 2006-08-14 Armin Burgmeier Set type hint of tool windows to UTILITY 2006-08-11 Armin Burgmeier Renamed disable-ipc to new-instance 2006-08-08 Armin Burgmeier Made statusbar more standard-compliant 2006-08-08 Armin Burgmeier Added --join and --disable-ipc command line options 2006-08-08 Armin Burgmeier Set urgency hint when chat messages arrive 2006-08-08 Philipp Kern Save user-modified palettes in the configuration [fixes #181] 2006-08-07 Philipp Kern Updated ChangeLog for release 2006-08-07 Philipp Kern Bumped version to 0.4.0rc3 2006-08-07 Philipp Kern Strictened the build-dependency on obby-0.4.0rc3 2006-06-16 Philipp Kern GCC 3.3 compile fixes 2006-06-15 Philipp Kern Do not crash when threads are already initialised 2006-06-07 Philipp Kern Replace "Shows up" by "Displays" 2006-06-07 Philipp Kern Updated ChangeLog for release 2006-06-06 Philipp Kern Depend on obby >= 0.4.0rc2; bump version to 0.4.0rc2 2006-06-07 Armin Burgmeier Fix SEGV caused by wrong usage of Gtk::AccelKey [fixes #163] 2006-06-04 Philipp Kern Translation roundup; new Catalan translation, thanks to Jordi Mallach 2006-06-04 Philipp Kern Bumped gobby.pot to reflect the current source code locations 2006-05-07 Philipp Kern Add document test to the `make check' testrunner 2006-05-07 Armin Burgmeier Added append tests 2006-05-07 Armin Burgmeier Added support for obby::text::npos to Document::erase and Document::get_slice 2006-05-07 Armin Burgmeier Added Document test 2006-05-07 Armin Burgmeier Added Document::clear() 2006-05-06 Philipp Kern Check for substrings in Win32 detection 2006-04-24 Armin Burgmeier Added contrib/artwork/doclist.png to EXTRA_DIST [fixes #152] 2006-04-19 Philipp Kern Add a man page for Gobby 2006-04-16 Philipp Kern Do not depend on JoinDialog creation on invokation 2006-04-15 Philipp Kern Check for a generic zeroconf target in obby 2006-04-15 Philipp Kern Expand the artists' credits 2006-04-11 Philipp Kern Updated ChangeLog for release 2006-04-10 Armin Burgmeier src/gselector.cpp: Added idle call in timout handler. This is a workaround for a possible bug in glib: A connection to Glib::signal_io is not triggered without waking up the main loop once more. 2006-04-10 Philipp Kern Enable URL support on Mac OS X 2006-04-10 Philipp Kern Updates to INSTALL 2006-04-10 Philipp Kern Little wrapping issue in translation 2006-04-10 Philipp Kern Reorder the PKG_CHECK_MODULES calls 2006-04-09 Armin Burgmeier Use Gobby's color selection palette in JoinProgressDialog color prompt 2006-04-09 Armin Burgmeier Fixed a thread-related issue that could cause a SEGV on connection loss 2006-04-01 Armin Burgmeier Inherit Document from sigc::trackable 2006-03-31 Philipp Kern gtk-connect does not work on buttons on Mac; reason unknown 2006-03-31 Philipp Kern Update version to 0.4.0rc1 2006-03-31 Philipp Kern Some kind of translation roundup, very limited 2006-03-30 Philipp Kern Empty the TODO for now 2006-03-31 Philipp Kern Updated README 2006-03-30 Armin Burgmeier Align info labels in preferences dialog to the left 2006-03-30 Armin Burgmeier Set priority of user tags lower than GtkSourceView's bracket highlighting tag 2006-03-30 Armin Burgmeier Initialize gnome-vfs correctly 2006-03-30 Armin Burgmeier Link http URLs in LogView when compiled --with-gnome [fixes #80] 2006-03-30 Philipp Kern Include the stat header 2006-03-30 Armin Burgmeier Fixed config class 2006-03-29 Armin Burgmeier Fixed Config::ParentEntry::supply_value 2006-03-29 Philipp Kern Depend on gnome-vfs-2.0 when compiled with GNOME support 2006-03-29 Armin Burgmeier Refactored Config class 2006-03-28 Armin Burgmeier Print remove command errors to chat 2006-03-28 Armin Burgmeier Use default context in ipc.cpp 2006-03-28 Armin Burgmeier Avoid unnecessary compiler warnings 2006-03-27 Armin Burgmeier Added timeout capability to GSelector, enable keepalives [fixes #131] 2006-03-25 Armin Burgmeier Added document list item 2006-03-25 Armin Burgmeier Remember position of tool windows 2006-03-25 Armin Burgmeier set initially given font name in Font::set when font selector is never realized 2006-03-25 Armin Burgmeier Send command line parameters only to other gobbys owned by the same user 2006-03-25 Armin Burgmeier Win32 IPC using hidden windows 2006-03-25 Armin Burgmeier Changed another occurence of obby-0.3 in configure script 2006-03-25 Philipp Kern Depend on net6-1.3 and obby-0.4 2006-03-25 Armin Burgmeier Pass command line parameters to remote Gobby instanc 2006-03-24 Philipp Kern Bump version to 0.3.99 to avoid confusion with final versions 2006-03-24 Armin Burgmeier Do not explictely request encryption, this is done by obby 2006-03-24 Armin Burgmeier Pack statusbar frames without space 2006-03-24 Armin Burgmeier Some fixes to JoinProgressDialog 2006-03-24 Philipp Kern Cosmetic changes to remove the references to RSA 2006-02-08 Benjamin Herr fixed possible out-of-bounds condition in convert2unix 2006-03-20 Armin Burgmeier Protect GSelector by a mutex 2006-03-17 Philipp Kern Initial NEWS section for 0.4.0 2006-03-19 Armin Burgmeier Send chat messages beginning with '/' as command 2006-03-19 Armin Burgmeier Activate goto button when pressing enter 2006-03-17 Philipp Kern We're in 2006 2006-03-17 Armin Burgmeier Reenabled user color change (has been dropped accidently) 2006-03-17 Armin Burgmeier Replaced DefaultDialog by Gtk::Dialog::set_default_response [fixes #117] 2006-03-15 Armin Burgmeier Use Gtk::Statusbar instead of Gtk::Frame for status bar 2006-03-15 Armin Burgmeier Added toggle button to hide chat [fixes #134] 2006-03-15 Armin Burgmeier Added chat icon by Benjamin Herr 2006-03-15 Armin Burgmeier Added font selection to preferences [fixes #123] 2006-03-14 Armin Burgmeier Implemented EncodingSelector::remove_text for compatibility with gtkmm < 2.8 2006-03-14 Armin Burgmeier Reopen host/join dialog after hosting/joining failed [fixes #130] 2006-03-10 Armin Burgmeier Show suffixed name in window title and document list [fixes #111] 2006-03-10 Armin Burgmeier Removed "Connection is now encrypted" debug message 2006-03-10 Armin Burgmeier Hide mime type column in file preferences page 2006-03-10 Armin Burgmeier Added mnemonics to main menu bar 2006-03-10 Armin Burgmeier Removed remaining references to mimemap 2006-03-09 Armin Burgmeier Ctrl+Alt+PgDown/Up shifts document [fixes #112] 2006-03-09 Armin Burgmeier Added filelist to preferences 2006-03-08 Armin Burgmeier Replaced mime map by file list in preferences 2006-03-07 Armin Burgmeier Disable OK button in password dialog when passwords do not match 2006-03-07 Armin Burgmeier Added application state frags controlling header sensitivity 2006-03-06 Armin Burgmeier Do not allow subscriptions to non-UTF-8-encoded documents 2006-03-06 Armin Burgmeier Store original encoding in document settings [fixes #65] 2006-03-05 Armin Burgmeier Added encoding selection in file chooser 2006-03-05 Armin Burgmeier Do not delete buffer after session closure, allow saving of closed sessions 2006-03-02 Philipp Kern Transform the ok button into a host one in the host dialog 2006-03-02 Philipp Kern Use a connect button instead of ok in the join dialog 2006-02-28 Armin Burgmeier Introduced document settings to store document's original encoding 2006-02-28 Armin Burgmeier Send UTF-8 as encoding 2006-02-26 Armin Burgmeier Disable subscribe button when subscription request has been sent [fixes #126] 2006-02-24 Armin Burgmeier alt+n switches tabs 2006-02-23 Armin Burgmeier Restored left gravity cursor on remote insert 2006-02-23 Armin Burgmeier Gobby seems to work now, but still needs further testing 2006-02-22 Armin Burgmeier Made Gobby compile again - does still not work 2006-02-19 Armin Burgmeier Adjusted GSelector to new selector principle 2006-02-14 Philipp Kern Experimental patch for client-initiated encryption 2006-02-06 Armin Burgmeier Replaced buffer wrappers by GSelector 2006-02-03 Armin Burgmeier Added obby/document.hpp include since it is heavily decoupled from obby itself 2006-02-02 Armin Burgmeier Changed buffer wrapper to match obby's new_net() 2006-01-30 Armin Burgmeier Temporary adjustments for document template parameter in document info 2006-01-29 Armin Burgmeier Temporary adjustments to document type template in obby::document_info 2006-01-26 Armin Burgmeier Changes for new net6 IO conditions 2006-01-11 Trac TODO updated 2006-01-07 Trac TODO updated 2005-12-31 Trac TODO updated 2005-12-13 Trac TODO updated 2005-12-11 Trac TODO updated 2005-12-10 Philipp Kern Forgot to translate at least one string 2005-12-08 Philipp Kern Translation roundup 2005-12-07 Philipp Kern Armin spotted the problem with encodings in the chat window 2005-11-24 Philipp Kern Translation roundup 2005-11-24 Philipp Kern Require net6-1.2 >= 1.2.1 2005-11-23 Trac TODO updated 2005-11-22 Armin Burgmeier Removed covariant returns from buffer wrapper 2005-11-21 Armin Burgmeier Do not crash if empty config is found 2005-11-20 Philipp Kern Search for obby in the paths specified by pkg-config 2005-11-20 Armin Burgmeier Give initial focus to close button in close confirmation dialog 2005-11-19 Armin Burgmeier Updated README and AUTHORS 2005-11-19 Armin Burgmeier Atomic write failed if the destination directory was not on the same device as the temporary directory, use normal write 2005-11-19 Trac TODO updated 2005-11-18 Armin Burgmeier Added icon.cpp to POTFILES.in 2005-11-18 Armin Burgmeier net6::gettext_package usage 2005-11-17 Armin Burgmeier documentlist.cpp was missing in POTFILES.in 2005-11-17 Armin Burgmeier Need to link against this for OLE Drag+Drop to work 2005-11-17 Armin Burgmeier Fixed a bug in Win32 Drag+Drop 2005-11-17 Armin Burgmeier Added find- and goto dialog to POTFILES.in 2005-11-17 Armin Burgmeier Goto line Dialog [fixes #79] 2005-11-17 Philipp Kern Protect the unpublish call 2005-11-17 Armin Burgmeier Adjusted Automake.am 2005-11-17 Armin Burgmeier Introduces ToggleWindow 2005-11-17 Armin Burgmeier Win32 Drag+Drop support [fixes #71] 2005-11-17 Trac TODO updated 2005-11-16 Armin Burgmeier Use WINDOW_TYPE_HINT_UTILITY for FindDialog as well 2005-11-16 Armin Burgmeier Set WINDOW_TYPE_HINT_UTILITY window_hint for tool windows 2005-11-16 Armin Burgmeier Fixed last dependency on 2005-11-16 Armin Burgmeier Format time string according to current locale 2005-11-15 Armin Burgmeier Win32 build fixes 2005-11-15 Philipp Kern Updated NEWS 2005-11-15 Philipp Kern Translation roundup 2005-11-15 Armin Burgmeier Win32 fixes in ProgressDialog's threading concept 2005-11-15 Armin Burgmeier Prompt when the user wants to exit Gobby and a session is still open [fixes #93] 2005-11-15 Armin Burgmeier Some UI fixes 2005-11-15 Armin Burgmeier Removed dependency on GNU regex library 2005-11-15 Armin Burgmeier Working FindDialog, removed regex support 2005-11-14 Philipp Kern String correction 2005-11-13 Armin Burgmeier Find dialog works better, but some regex stuff still does not work 2005-11-13 Philipp Kern Bugfix, transmit the value correctly 2005-11-13 Philipp Kern Remember the window positions 2005-11-13 Armin Burgmeier Non-working FindDialog 2005-11-13 Philipp Kern Moved the config from window to main 2005-11-13 Philipp Kern Expand online users by default 2005-11-13 Armin Burgmeier Added missing documentlist files 2005-11-13 Trac TODO updated 2005-11-13 Armin Burgmeier Added document list, only subscribed document are shown in folder 2005-11-12 Philipp Kern Added userlist image 2005-11-12 Armin Burgmeier Precreate Gobby icon 2005-11-12 Armin Burgmeier Removed empty paned from window 2005-11-12 Armin Burgmeier Added user list as tool window 2005-11-11 Armin Burgmeier Changed user list icons 2005-11-11 Armin Burgmeier Fixed a synchronisation loss when resubscribing to a document 2005-11-11 Armin Burgmeier Implemented tree-based userlist 2005-11-09 Trac TODO updated 2005-11-07 Armin Burgmeier Made folder scrollable, decreases minimum width if many tabs are open 2005-11-07 Armin Burgmeier Initialise colour selection dialog with button's current colour in Gobby::ColorButton 2005-11-07 Armin Burgmeier Userlist using TreeView; currently disfunctional! 2005-11-07 Trac TODO updated 2005-11-06 Armin Burgmeier Update title bar correctly upon reconnection [fixes #92] 2005-11-06 Armin Burgmeier Atomic write for documents, do not append newline on write [fixes #91] 2005-11-06 Armin Burgmeier Use a left-gravity cursor on remote insert operations [fixes #84] 2005-11-06 Philipp Kern Added translator credits and link to Rosetta 2005-11-05 Armin Burgmeier pre-select the save button in close confirmation dialog 2005-11-05 Armin Burgmeier Close document just unsubscribes from the document [fixes #83] 2005-11-05 Armin Burgmeier Fixed a German translation error 2005-11-05 Armin Burgmeier Show a close confirmation dialog according to GNOME HIG [fixes #105] 2005-11-05 Armin Burgmeier Convert resulting filename to utf8 in FileEntry 2005-11-05 Armin Burgmeier Added overwrite confirmation if gtkmm is >= 2.8 2005-11-05 Trac TODO updated 2005-11-04 Armin Burgmeier Set Gobby::Icon::gobby as default window icon 2005-11-04 Armin Burgmeier Fixed a memleak in the GtkSourceView wrapper 2005-11-04 Armin Burgmeier Adjustments for inc_flags/exc_flags 2005-11-04 Philipp Kern Allow to join servers with port numbers < 1024 2005-11-03 Armin Burgmeier Fixed another bug in configure.in 2005-11-03 Armin Burgmeier Fixed GTKMM-2.8 check 2005-11-03 Armin Burgmeier Allow to change name/colour directly if it is already in use [Scott Baker] 2005-11-03 Philipp Kern Added a check for Gtkmm's version (untested) 2005-11-03 Armin Burgmeier Do not use IPv6 when hosting a session 2005-11-03 Armin Burgmeier Patched Gobby for new obby::colour class 2005-11-03 Armin Burgmeier LogView::log takes optionally timestamp 2005-11-03 Philipp Kern Changed one translated string 2005-11-03 Philipp Kern Added Swedish translation, thanks to Daniel Nylander 2005-11-02 Armin Burgmeier Patched Gobby for new obby chat class 2005-11-02 Armin Burgmeier Updated translation po/pot files 2005-10-28 Armin Burgmeier Patched set_selection to take Gtk::TextIter and scroll to selected position 2005-10-28 Benjamin Herr Added GNU regex wrappers (not used yet because they suck at unicode) 2005-10-27 Armin Burgmeier Added Gobby::Document::set_selection 2005-10-29 Trac TODO updated 2005-10-21 Armin Burgmeier Temporary menu entry for saving a session [fixes #20] 2005-10-15 Trac TODO updated 2005-10-09 Armin Burgmeier Session to restore may be given in HostDialog 2005-10-09 Armin Burgmeier Introduces FileEntry 2005-10-09 Armin Burgmeier Removed trailing semicolon after namespace 2005-10-09 Trac TODO updated 2005-10-08 Trac TODO updated 2005-10-08 Trac TODO updated 2005-10-07 Philipp Kern Wrap the lines in the chat window [fixes #99] 2005-10-07 Philipp Kern Escape special characters in document title [fixes #101] 2005-10-07 Philipp Kern Translation roundup 2005-10-07 Philipp Kern Show current connection status in statusbar 2005-10-07 Trac TODO updated 2005-10-05 Philipp Kern Fixed thread creation issues 2005-10-05 Philipp Kern Compile fix by const_casting for g_atomic_int_get 2005-10-05 Trac TODO updated 2005-10-04 Armin Burgmeier Do not block when connecting to a remote host 2005-10-04 Armin Burgmeier Added Atomic class for Atomic boolean operations 2005-10-04 Armin Burgmeier Adjusted buffer wrappers to buffer's reusability 2005-10-01 Philipp Kern Do not show disconnected users as joined in chat 2005-10-01 Philipp Kern Make connected flag in userlist dependend on the user's value 2005-09-29 Trac TODO updated 2005-09-22 Michael Walter Added #include to to avoid being included later. 2005-09-22 Michael Walter Compile fix (m_client -> m_net.reset). 2005-09-22 Michael Walter Added missing return statement. 2005-09-22 Michael Walter Unicode fixes (was calling generic version with ASCII/ANSI strings). 2005-09-20 Armin Burgmeier Fixed usages of user_table's iterator for non-templated user_table 2005-09-19 Trac TODO updated 2005-09-17 Armin Burgmeier Fixed a crash on client-side connection loss 2005-09-15 Philipp Kern Removed pending changes and revision from the status bar 2005-09-15 Philipp Kern Opened new 0.3.x tree 2005-09-15 Philipp Kern Depend on net6-1.2 and obby-0.3 2005-09-15 Armin Burgmeier Avoid useless thread in JoinProgressDialog 2005-09-15 Armin Burgmeier Two additional checks concerning subscription 2005-09-15 Philipp Kern Added 0.3.0 NEWS item 2005-09-05 Philipp Kern Added a NEWS item to reflect the line encoding patch 2005-09-02 Philipp Kern Updated NEWS to reflect more changes 2005-09-14 Armin Burgmeier Adjustments to jupiter-using obby 2005-09-13 Trac TODO updated 2005-09-07 Armin Burgmeier Some more const-correctness 2005-09-06 Armin Burgmeier Adjusted buffer wrapper because peer has been renamed to user in net6 2005-07-28 Armin Burgmeier Fixed SEGV on win32 when creating/joining a session 2005-09-05 Philipp Kern Removed obsolete TODO items 2005-09-05 Trac TODO updated 2005-09-04 Philipp Kern Convert all different line encodings to UNIX ones 2005-09-02 Philipp Kern Added 0.2.1 and 0.2.2 to version history 2005-09-01 Armin Burgmeier Disable Glib's implicit charset conversion to the current locale 2005-08-31 Philipp Kern Fixed most unknown file extensions, added some more 2005-08-21 Philipp Kern Made the JoinDialog vbox non-conditional 2005-08-27 Trac TODO updated 2005-08-25 Armin Burgmeier net6::client::conn is now auto_ptr TODO updated 2005-08-23 Trac TODO updated 2005-08-18 Philipp Kern Updated AUTHORS to list contributors and translators 2005-08-18 Philipp Kern Added Spanish translation, thanks to Mario Palomo 2005-08-15 Trac TODO updated 2005-08-13 Trac TODO updated 2005-08-07 Trac TODO updated 2005-08-05 Philipp Kern Allow to open documents as unowned text, thanks to Ben Levitt [fixes #52] 2005-08-05 Trac TODO updated 2005-08-03 Trac TODO updated 2005-08-02 Philipp Kern Non-empty documents are flagged modified [ref #72] 2005-07-31 Trac TODO updated 2005-07-29 Philipp Kern Updated ChangeLog for release 2005-07-29 Trac TODO updated 2005-07-28 Philipp Kern Updated German translation 2005-07-28 Philipp Kern Updates from `make update-po' 2005-07-28 Armin Burgmeier Win32 build fix 2005-07-27 Armin Burgmeier Some fixes for buffer_wrappers 2005-07-27 Armin Burgmeier Fixed POTFILES.in for new io/ subdir 2005-07-27 Armin Burgmeier Emit content_changed signal in insert/erase_after [fixes #64] 2005-07-27 Armin Burgmeier Queried the cached subscribe value instead of requesting it from obby::document_info [fixes #63] 2005-07-27 Armin Burgmeier Moved buffer_wrapper to io/ subdir, enhanced portabaility 2005-07-27 Philipp Kern The last missing French string 2005-07-27 Philipp Kern Updated French translation by Peer Janssen 2005-07-27 Trac TODO updated 2005-07-26 Philipp Kern Better Win32 network handling announced 2005-07-26 Philipp Kern Added a readme and an installation guide [fixes #51] 2005-07-26 Philipp Kern Initialise the colour selection dialog with the current user colour 2005-07-26 Armin Burgmeier Column returns the real column of the text not just the nth character 2005-07-26 Armin Burgmeier User highlighting when name is mentioned in chat [fixes #6] 2005-07-26 Armin Burgmeier Prompt before closing modified documents 2005-07-26 Armin Burgmeier Save host/port settings into new config keys 2005-07-26 Armin Burgmeier Switch to tabs newly opened [fixes #27] 2005-07-26 Armin Burgmeier Connected/Subscribed flags in user list (fixes #12) 2005-07-25 Armin Burgmeier Check for valid UTF-8 after converting 2005-07-25 Armin Burgmeier Try to convert files with other encodings to UTF-8 [fixes #43] 2005-07-25 Philipp Kern Colourised tab labels [fixes #59] 2005-07-25 Philipp Kern Merged host and join dialog data just again, with separated ports and hostnames 2005-07-25 Philipp Kern Added more dots to the menu items 2005-07-25 Armin Burgmeier Format string adjustments 2005-07-25 Trac TODO updated 2005-07-24 Philipp Kern Depend on obby's 0.2.x API 2005-07-24 Philipp Kern Improved the Zeroconf handling 2005-07-24 Armin Burgmeier Added Window::get_current_document 2005-07-24 Armin Burgmeier Do not allow empty document names 2005-07-24 Armin Burgmeier Removed useless preferences_changed delegate 2005-07-24 Armin Burgmeier Update cursor position display in statusbar by remote changes 2005-07-24 Armin Burgmeier Modified flag [fixes #25] 2005-07-24 Philipp Kern Translation roundup 2005-07-24 Armin Burgmeier Added PasswordDialog 2005-07-24 Armin Burgmeier Corrections to file handling 2005-07-24 Armin Burgmeier Added toolbar settings into preferences [fixes #32] 2005-07-23 Philipp Kern Added some release notes directly to the sources 2005-07-23 Philipp Kern Adjusted the Zeroconf usage 2005-07-23 Armin Burgmeier First attempt to allow opening files by dropping them on a document, doesn't work. 2005-07-23 Armin Burgmeier Drag+Drop of files into open Gobby session 2005-07-23 Philipp Kern Set colour implemented 2005-07-21 Armin Burgmeier UNDO: Use 'session' config key for both client and host 2005-07-23 Armin Burgmeier No fixed size for the send button 2005-07-23 Armin Burgmeier Removed debug log 2005-07-23 Armin Burgmeier Colour presets [fixes #36] Thanks tom! :D 2005-07-23 Philipp Kern Use a tooltip instead of an expanded label 2005-07-23 Armin Burgmeier Smart home/end preference 2005-07-23 Armin Burgmeier Re-arranged status bar 2005-07-22 Armin Burgmeier Some more preferences 2005-07-23 Trac TODO updated 2005-07-22 Armin Burgmeier typo in preferences dialog fixed 2005-07-22 Armin Burgmeier Local preferences, syntax submenu 2005-07-22 Armin Burgmeier Fixed some messup 2005-07-22 Philipp Kern Fixed just another conflict 2005-07-22 Philipp Kern A cleanup patch to fix hundreds of conflicts 2005-07-22 Philipp Kern Changed the GtkSourceView dependency to a hard one 2005-07-22 Armin Burgmeier Fixed conflict caused by phil's security page 2005-07-22 Armin Burgmeier Introduced working preferences, some are missing 2005-07-22 Philipp Kern Added a Security stub to the preferences dialog sources 2005-07-21 Philipp Kern Changes to the About dialog 2005-07-21 Armin Burgmeier Small UI fixes 2005-07-21 Armin Burgmeier First preferences dialog approach 2005-07-21 Philipp Kern Used ngettext one time, updated templates a bit 2005-07-21 Armin Burgmeier Changes by libtool 2005-07-21 Armin Burgmeier Use 'session' config key for both client and host 2005-07-21 Philipp Kern Use the right directory to look for pixmaps 2005-07-21 Armin Burgmeier Small adjustments to net6 API change 2005-07-21 Trac TODO updated 2005-07-20 Armin Burgmeier Connect synchoniously to the server, would cause too much trouble otherwise 2005-07-20 Armin Burgmeier Gtk::manage dynamically allocated widgets 2005-07-20 Armin Burgmeier Fixed SEGV on connection error 2005-07-20 Armin Burgmeier Initialize Threading system in main() 2005-07-20 Armin Burgmeier Close icons in tab labels [ref #32] 2005-07-20 Armin Burgmeier Display current document in title bar 2005-07-19 Armin Burgmeier Progress dialogs 2005-07-18 Philipp Kern Added dependency on gthread-2.0, versioned one on net6 2005-07-17 Armin Burgmeier User authentication stuff 2005-07-15 Armin Burgmeier Global password 2005-07-15 Trac TODO updated 2005-07-03 Trac TODO updated 2005-07-01 Trac TODO updated 2005-06-30 Philipp Kern Highlight chat messages with the own nickname [fixes #6] 2005-06-30 Philipp Kern Pass the current session buffer to all client widgets 2005-06-25 Trac TODO updated 2005-06-24 Philipp Kern Removed two unnecessary includes from src/buffer_wrapper.cpp 2005-06-24 Philipp Kern French translation reviewed by Mohammed Adnene Trojette 2005-06-24 Philipp Kern Updated translation files 2005-06-24 Philipp Kern Updated German translation, still not fully completed 2005-06-23 Philipp Kern Catch-all update of the gettext stuff 2005-06-23 Philipp Kern Added French translation of Peer Janssen [fixes #50] 2005-06-23 Armin Burgmeier Fixes for changed obby record API 2005-06-17 Trac TODO updated 2005-06-16 Philipp Kern Removed autogen.sh, it is superseded by autoreconf 2005-06-16 Philipp Kern Return a const char pointer from gettext 2005-06-15 Philipp Kern Added word wrapping 2005-06-15 Armin Burgmeier Replace all non-ascii characters in UI XML [fixes #44] 2005-06-14 Philipp Kern One new string to translate, updated debconf template 2005-06-14 Philipp Kern Added missing conditionals related to GtkSourceView 2005-06-14 Philipp Kern Gobby depends on obby 0.2.0 or higher 2005-06-14 Armin Burgmeier Using obby::format_string instead of std::stringstream 2005-06-14 Armin Burgmeier Enable highlighting when subscribed 2005-06-14 Trac TODO updated 2005-06-13 Armin Burgmeier Adjustments for synchronisation on request. The core feature seems to work. The user interface, however, may be discussed and changed later on. This is just a first try to test the feature and to make Gobby compile with it. 2005-06-13 Trac TODO updated 2005-06-12 Trac TODO updated 2005-06-10 Philipp Kern Preliminary, but working Zeroconf support [ref #17] 2005-06-09 Philipp Kern Revised the German translation 2005-06-09 Philipp Kern Corrected AE color to BE colour 2005-06-09 Trac TODO updated 2005-06-08 Trac TODO updated 2005-06-07 Armin Burgmeier Adjusted code for changes user flags in libobby 2005-06-07 Philipp Kern Modified history by adding the missing 0.1.1 NEWS entry 2005-06-07 Philipp Kern Added dependency on Automake 1.9; added missing NEWS check 2005-06-07 Trac TODO updated 2005-06-06 Philipp Kern Ship gobby.desktop in the distribution 2005-06-06 Armin Burgmeier Adjusted for net6's error code transmission (#16) 2005-06-06 Armin Burgmeier Better win32 network implementation [fixes #2] 2005-06-05 Trac TODO updated 2005-06-04 Philipp Kern Updated ChangeLog for release 2005-06-04 Armin Burgmeier Fixed a segfault which occured sometimes when closing documents 2005-06-04 Armin Burgmeier Introduced DefaultDialog to allow to press Enter in dialogs 2005-06-04 Armin Burgmeier Show up user-colourising text immediately [fixes #22] 2005-06-04 Philipp Kern Removed the useless ENABLE_NLS check as we hard-depend on gettext 2005-06-04 Philipp Kern Translated missing strings into German 2005-06-04 Armin Burgmeier Use another default color as black [fixes #34] 2005-06-04 Armin Burgmeier Remove entities in on_folder_tab_switched 2005-06-04 Armin Burgmeier A much better fix for #24 2005-06-04 Philipp Kern Updated the gettext template and the German translation 2005-06-04 Armin Burgmeier Removed Umlauts from Language file names to build valid XML, renamed Document to View in menu 2005-06-04 Armin Burgmeier Update user colour in key press event handler if possible [fixes #24] If someone copied a part of the buffer, the tags applied to it were copied, too. If he pasted it then, the insert-text signal handler could not remove those tags because they were not yet applied. So it ended up in having to user colour tags applied to the new range of text: The one from the user who pasted the text and the one from the user who wrote the original text. This is solved by adding tags followed by a key press event not anymore in the insert-text event handler but in the key press event handler, which is called later, when the pasted tag already has been applied. Then, it may be removed and the one and only user colour tag can be set. 2005-06-03 Philipp Kern Use "n unsynced change(s)" instead of "in sync" 2005-06-03 Benjamin Herr Fixed my messup fixing the chat multiline handling 2005-06-03 Trac TODO updated 2005-06-02 Trac TODO updated 2005-06-02 Trac TODO updated 2005-06-02 Trac TODO updated 2005-06-02 Trac TODO updated 2005-06-02 Philipp Kern Merging the multi-line chat fixes 2005-05-31 Benjamin Herr Splitting up received lines of chat by newlines, added todo items 2005-06-02 Armin Burgmeier Menu to switch the syntax colouring scheme [fixes #4] 2005-06-01 Armin Burgmeier Option to disable line numbers [fixes #7] 2005-06-01 Armin Burgmeier Show revision and sync state in statusbar [fixes #13] 2005-06-01 Armin Burgmeier Fixed some errors caused by recent libobby API changes 2005-05-30 Armin Burgmeier Set correct notebook tab after startup 2005-05-29 Armin Burgmeier Use of local_buffer instead of dynamic casts [ref #9] 2005-05-29 Armin Burgmeier Initialise size of paned widgets [fixes #5] 2005-05-29 Armin Burgmeier Allow the user to save documents after connection loss [fixes #1] 2005-05-29 Armin Burgmeier Disable close and save buttons if no more documents are open 2005-05-28 Armin Burgmeier Send lines separately in chat 2005-05-26 Philipp Kern Changed the desktop item's name to be a bit more compilant 2005-05-26 Armin Burgmeier Segfault fixed some time ago... 2005-05-22 Philipp Kern Ebuild change: Depend on gtksourceview, use GNOME integration 2005-05-21 Philipp Kern Load icon from file when compiled --with-gnome 2005-05-21 Philipp Kern Resized the 128x128 XPM to 32x32 2005-05-20 Philipp Kern Added missing assert include 2005-05-20 Philipp Kern Added build-dependency on net6-1.0 2005-05-19 Philipp Kern configure now detects the presence of GtkSourceView automatically 2005-05-19 Philipp Kern Makefile.am had a wrong conditional statement 2005-05-15 Philipp Kern Serious bug exploited, po/ permission-related build fix 2005-05-15 Philipp Kern Added GNOME integration 2005-05-11 Philipp Kern Added gzip'ed XPM version of the Gobby logo 2005-05-10 Armin Burgmeier Fixed a segfault which occured sometimes on the exit 2005-05-08 Armin Burgmeier Shuffled some files around, fixed non-gtksourceview build [phil] 2005-05-08 Armin Burgmeier WIN32 build fix (resource files build correctly) [phil] 2005-05-08 Armin Burgmeier gobby resource file until autotools are able to build it 2005-05-08 Armin Burgmeier Sized gobby.ico to 48x48 Bigger icons just waste memory on windows, they will never be shown in their full size. 2005-05-08 Philipp Kern Try to build gobby.res from top-level Makefile.am 2005-05-08 Philipp Kern Use Automake for win32/ subdirectory 2005-05-08 Philipp Kern Fixed make dist 2005-05-08 Philipp Kern Delocalised two error strings 2005-05-08 Philipp Kern po reflect new line numbers within the source files 2005-05-08 Philipp Kern Include contrib/ and win32/ in make dist 2005-05-08 Philipp Kern Added more WIN32 build stuff 2005-05-07 Philipp Kern Suppress the console window in favour of a real GUI application 2005-05-07 Armin Burgmeier Win32 does not have localtime_r We do not need thread safety anyway... 2005-05-07 Armin Burgmeier make dist requires ChangeLog... 2005-05-07 Armin Burgmeier win32 resource file for the gobby icon 2005-05-07 Armin Burgmeier User colourising 2005-05-07 Armin Burgmeier Added keyboard shortcuts 2005-05-07 Armin Burgmeier Moved language manager to folder 2005-05-07 Armin Burgmeier Replaced _ macro by an inline function 2005-05-07 Armin Burgmeier Separate mime map 2005-05-06 Armin Burgmeier StatusBar showing cursor position and current language 2005-05-06 Philipp Kern Added more TODO items 2005-05-05 Philipp Kern Made the TODO list more readable 2005-05-05 Philipp Kern A missing shell call produced build errors 2005-05-05 Philipp Kern Set scripts executable and use a partial checkout in the ebuild 2005-05-05 Philipp Kern Added missing po/Makefile.in.in 2005-05-05 Philipp Kern Gobby i18n, German translation added 2005-05-05 Philipp Kern Ignore more intermediate files 2005-05-05 Philipp Kern Added mkinstalldirs from Autotools 2005-05-05 Armin Burgmeier auto* updated some auto-generated files... 2005-05-05 Armin Burgmeier Gobby sends positions now in bytes and no longer in characters. libobby takes all positions in bytes to having not to care about different encodings. 2005-05-04 Philipp Kern Display a Gtk::MessageDialog on an unhandled exception 2005-04-27 Philipp Kern Fixed gobby to compile without gtksourceview 2005-04-26 Philipp Kern Insert parameter placeholder corrected 2005-04-25 Philipp Kern Ugly fix to get the times right 2005-04-25 Armin Burgmeier Implemented timestamps in logview 2005-04-25 Philipp Kern Some corrections to the file types 2005-04-24 Philipp Kern Set current name in the Save FileChooser 2005-04-24 Philipp Kern Added two new TODO items 2005-04-22 Armin Burgmeier Code highlighting by file extension 2005-04-22 Armin Burgmeier Some GtkSourceView wrapper fixes and extensions 2005-04-22 Armin Burgmeier GtkSourceLanguagesManager wrapper 2005-04-21 Armin Burgmeier Wrapped GtkSourceLanguage 2005-04-21 Armin Burgmeier Use a monospaced font for the TextView 2005-04-20 Armin Burgmeier GtkSourceBuffer wrapper 2005-04-18 Philipp Kern Save document was missing in the source 2005-04-17 Philipp Kern Check for howl in libobby 2005-04-17 Armin Burgmeier sourceview/-subdir for sourceview wrappers, Gtk::SourceView actually works 2005-04-17 Philipp Kern Gather host information correctly 2005-04-17 Armin Burgmeier Win32 buffer_wrappers using a timer 2005-04-15 Armin Burgmeier Added tom as artist 2005-04-15 Armin Burgmeier Added inline gobby icon 2005-04-15 Philipp Kern Added artwork credits 2005-04-15 Thomas Glatt Added Gobby artwork 2005-04-15 Armin Burgmeier Call correct base_function in Gobby::Host::on_connect 2005-04-15 Armin Burgmeier Adjusted buffer_wrapper for net6 API corrections 2005-04-15 Armin Burgmeier Added some first wrapper code for GtkSourceView -- disfunctional 2005-04-15 Philipp Kern Added framework to use SourceView instead of TextView 2005-04-14 Philipp Kern Added boringfile 2005-04-14 Philipp Kern Added save document hooks, but w/o real functionality 2005-04-14 Philipp Kern Use the new include path of libobby 2005-04-14 Philipp Kern Check for obby-1.0 instead of lobby-1.0 2005-04-14 Philipp Kern Implemented open document 2005-04-14 Philipp Kern Removed ui.xml from the ebuild 2005-04-14 Philipp Kern XML UI descriptions are now present within src/header.cpp 2005-04-14 Philipp Kern Compile the right buffer wrappers for their corresponding platform 2005-04-14 Philipp Kern Fix buffer wrapper to use generic on !WIN32 2005-04-12 Armin Burgmeier Splitted buffer_wrapper up to buffer_wrapper_generic and buffer_wrapper. buffer_wrapper_win32 will follow. 2005-04-11 Philipp Kern Implemented close a bit more correctly, updated TODO 2005-04-11 Philipp Kern Remove current document, *hopefully* w/o memory leak 2005-04-10 Thomas Glatt Ebuild for gobby 2005-04-10 Philipp Kern Resolved conflict in Makefile.am related to WIN32 build 2005-04-10 Philipp Kern Added WIN32 build support 2005-04-09 Armin Burgmeier Win32 build fixes; buffer_wrappers still use a timer on win32 2005-04-09 Armin Burgmeier Distribute header files with 'make dist' 2005-04-09 Armin Burgmeier Replaced ERROR with IOERROR in buffer_wrappers according to new net6 API 2005-04-09 Armin Burgmeier Fixed missing include in buffer_wrapper.cpp 2005-04-09 Armin Burgmeier Use the file name of the file to open as document title 2005-04-09 Philipp Kern Relicensed under the GPL Reasoning: There was never the intention to license gobby under the LGPL. COPYING included the GPL but all the license headers referred to the LGPL. This is now fixed in accordance with all the contributing authors. ACK: - Armin Burgmeier - Philipp Kern - Benjamin Herr 2005-04-09 Armin Burgmeier Watching on Glib::signal_io() instead of using a timer 2005-04-08 Armin Burgmeier Fixed a crash in gobby which occured if a connection has been lost 2005-04-08 Armin Burgmeier Changed Menu-Action 'Help' to 'MenuHelp', for consistency with other actions 2005-04-08 Armin Burgmeier Resolved a conflict in inc/window.hpp and src/window.cpp 2005-04-08 Armin Burgmeier Document creation 2005-04-08 Philipp Kern Added about dialog 2005-04-08 Benjamin Herr Added entrydialog to prompt for strings 2005-04-08 Armin Burgmeier Fixed gobby synchronization 2005-04-08 Benjamin Herr Added menu items for *Document, fixed typo 2005-04-08 Philipp Kern Moved config_.hpp to config.hpp, introduced features.hpp 2005-04-07 Philipp Kern Added initial NEWS content and Ben to AUTHORS 2005-04-07 Philipp Kern Added document toolbar button stubs 2005-04-07 Philipp Kern Receive document title from libobby 2005-04-07 Armin Burgmeier h4ck 2005-04-07 Benjamin Herr Todo: Exceptions? 2005-04-07 Benjamin Herr Fixed window to also connect chat signals on join 2005-04-07 Benjamin Herr Fixed indenting spaces to be tabs 2005-04-07 Armin Burgmeier Document synchronisation thorugh libobby 2005-04-07 Benjamin Herr Added handling of chat events from m_chat and m_buffer 2005-04-05 Armin Burgmeier Initial TODO file 2005-04-04 Philipp Kern Depend on gtkmm-2.4 >= 2.6.0 2005-04-03 Armin Burgmeier Document class representing an obby::document 2005-04-03 Armin Burgmeier Event delegations 2005-04-03 Armin Burgmeier XML config file in home dir; requires libxml++ 2005-04-02 Armin Burgmeier Added create & join dialogs 2005-04-02 Armin Burgmeier Skeleton of the UI 2005-04-02 Armin Burgmeier Header, GTK naming scheme 2005-03-30 Philipp Kern Autotoolised gobby 2005-03-30 Armin Burgmeier Empty gobby window gobby-0.5.0/aclocal.m40000644000175000017500000021701612376162107011413 00000000000000# generated automatically by aclocal 1.11.6 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file 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. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # Copyright (C) 1995-2002 Free Software Foundation, Inc. # Copyright (C) 2001-2003,2004 Red Hat, Inc. # # This file is free software, distributed under the terms of the GNU # General Public License. As a special exception to the GNU General # Public License, this file may be distributed as part of a program # that contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU Public License # but which still want to provide support for the GNU gettext functionality. # # Macro to add for using GNU gettext. # Ulrich Drepper , 1995, 1996 # # Modified to never use included libintl. # Owen Taylor , 12/15/1998 # # Major rework to remove unused code # Owen Taylor , 12/11/2002 # # Added better handling of ALL_LINGUAS from GNU gettext version # written by Bruno Haible, Owen Taylor 5/30/3002 # # Modified to require ngettext # Matthias Clasen 08/06/2004 # # We need this here as well, since someone might use autoconf-2.5x # to configure GLib then an older version to configure a package # using AM_GLIB_GNU_GETTEXT AC_PREREQ(2.53) dnl dnl We go to great lengths to make sure that aclocal won't dnl try to pull in the installed version of these macros dnl when running aclocal in the glib directory. dnl m4_copy([AC_DEFUN],[glib_DEFUN]) m4_copy([AC_REQUIRE],[glib_REQUIRE]) dnl dnl At the end, if we're not within glib, we'll define the public dnl definitions in terms of our private definitions. dnl # GLIB_LC_MESSAGES #-------------------- glib_DEFUN([GLIB_LC_MESSAGES], [AC_CHECK_HEADERS([locale.h]) if test $ac_cv_header_locale_h = yes; then AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi fi]) # GLIB_PATH_PROG_WITH_TEST #---------------------------- dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], [# Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in /*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in ifelse([$5], , $PATH, [$5]); do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word" break fi fi done IFS="$ac_save_ifs" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # GLIB_WITH_NLS #----------------- glib_DEFUN([GLIB_WITH_NLS], dnl NLS is obligatory [USE_NLS=yes AC_SUBST(USE_NLS) gt_cv_have_gettext=no CATOBJEXT=NONE XGETTEXT=: INTLLIBS= AC_CHECK_HEADER(libintl.h, [gt_cv_func_dgettext_libintl="no" libintl_extra_libs="" # # First check in libc # AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, [AC_TRY_LINK([ #include ], [return !ngettext ("","", 1)], gt_cv_func_ngettext_libc=yes, gt_cv_func_ngettext_libc=no) ]) if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, [AC_TRY_LINK([ #include ], [return !dgettext ("","")], gt_cv_func_dgettext_libc=yes, gt_cv_func_dgettext_libc=no) ]) fi if test "$gt_cv_func_ngettext_libc" = "yes" ; then AC_CHECK_FUNCS(bind_textdomain_codeset) fi # # If we don't have everything we want, check in libintl # if test "$gt_cv_func_dgettext_libc" != "yes" \ || test "$gt_cv_func_ngettext_libc" != "yes" \ || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then AC_CHECK_LIB(intl, bindtextdomain, [AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dgettext, gt_cv_func_dgettext_libintl=yes)])]) if test "$gt_cv_func_dgettext_libintl" != "yes" ; then AC_MSG_CHECKING([if -liconv is needed to use gettext]) AC_MSG_RESULT([]) AC_CHECK_LIB(intl, ngettext, [AC_CHECK_LIB(intl, dcgettext, [gt_cv_func_dgettext_libintl=yes libintl_extra_libs=-liconv], :,-liconv)], :,-liconv) fi # # If we found libintl, then check in it for bind_textdomain_codeset(); # we'll prefer libc if neither have bind_textdomain_codeset(), # and both have dgettext and ngettext # if test "$gt_cv_func_dgettext_libintl" = "yes" ; then glib_save_LIBS="$LIBS" LIBS="$LIBS -lintl $libintl_extra_libs" unset ac_cv_func_bind_textdomain_codeset AC_CHECK_FUNCS(bind_textdomain_codeset) LIBS="$glib_save_LIBS" if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then gt_cv_func_dgettext_libc=no else if test "$gt_cv_func_dgettext_libc" = "yes" \ && test "$gt_cv_func_ngettext_libc" = "yes"; then gt_cv_func_dgettext_libintl=no fi fi fi fi if test "$gt_cv_func_dgettext_libc" = "yes" \ || test "$gt_cv_func_dgettext_libintl" = "yes"; then gt_cv_have_gettext=yes fi if test "$gt_cv_func_dgettext_libintl" = "yes"; then INTLLIBS="-lintl $libintl_extra_libs" fi if test "$gt_cv_have_gettext" = "yes"; then AC_DEFINE(HAVE_GETTEXT,1, [Define if the GNU gettext() function is already present or preinstalled.]) GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl if test "$MSGFMT" != "no"; then glib_save_LIBS="$LIBS" LIBS="$LIBS $INTLLIBS" AC_CHECK_FUNCS(dcgettext) MSGFMT_OPTS= AC_MSG_CHECKING([if msgfmt accepts -c]) GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ msgid "" msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Project-Id-Version: test 1.0\n" "PO-Revision-Date: 2007-02-15 12:01+0100\n" "Last-Translator: test \n" "Language-Team: C \n" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) AC_SUBST(MSGFMT_OPTS) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr], [CATOBJEXT=.gmo DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share and dnl and CATOBJEXT=.gmo in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [CATOBJEXT=.gmo DATADIRNAME=share], [CATOBJEXT=.mo DATADIRNAME=lib]) ;; *-*-openbsd*) CATOBJEXT=.mo DATADIRNAME=share ;; *) CATOBJEXT=.mo DATADIRNAME=lib ;; esac]) LIBS="$glib_save_LIBS" INSTOBJEXT=.mo else gt_cv_have_gettext=no fi fi ]) if test "$gt_cv_have_gettext" = "yes" ; then AC_DEFINE(ENABLE_NLS, 1, [always defined to indicate that i18n is enabled]) fi dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is not GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header /dev/null 2> /dev/null; then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi fi # We need to process the po/ directory. POSUB=po AC_OUTPUT_COMMANDS( [case "$CONFIG_FILES" in *po/Makefile.in*) sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile esac]) dnl These rules are solely for the distribution goal. While doing this dnl we only have to keep exactly one list of the available catalogs dnl in configure.ac. for lang in $ALL_LINGUAS; do GMOFILES="$GMOFILES $lang.gmo" POFILES="$POFILES $lang.po" done dnl Make all variables we use known to autoconf. AC_SUBST(CATALOGS) AC_SUBST(CATOBJEXT) AC_SUBST(DATADIRNAME) AC_SUBST(GMOFILES) AC_SUBST(INSTOBJEXT) AC_SUBST(INTLLIBS) AC_SUBST(PO_IN_DATADIR_TRUE) AC_SUBST(PO_IN_DATADIR_FALSE) AC_SUBST(POFILES) AC_SUBST(POSUB) ]) # AM_GLIB_GNU_GETTEXT # ------------------- # Do checks necessary for use of gettext. If a suitable implementation # of gettext is found in either in libintl or in the C library, # it will set INTLLIBS to the libraries needed for use of gettext # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() # on various variables needed by the Makefile.in.in installed by # glib-gettextize. dnl glib_DEFUN([GLIB_GNU_GETTEXT], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_HEADER_STDC])dnl GLIB_LC_MESSAGES GLIB_WITH_NLS if test "$gt_cv_have_gettext" = "yes"; then if test "x$ALL_LINGUAS" = "x"; then LINGUAS= else AC_MSG_CHECKING(for catalogs to be installed) NEW_LINGUAS= for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then NEW_LINGUAS="$NEW_LINGUAS $presentlang" fi done LINGUAS=$NEW_LINGUAS AC_MSG_RESULT($LINGUAS) fi dnl Construct list of names of catalog files to be constructed. if test -n "$LINGUAS"; then for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done fi fi dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but ($top_srcdir). dnl Try to locate is. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) dnl Generate list of files to be processed by xgettext which will dnl be included in po/Makefile. test -d po || mkdir po if test "x$srcdir" != "x."; then if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then posrcprefix="$srcdir/" else posrcprefix="../$srcdir/" fi else posrcprefix="../" fi rm -f po/POTFILES sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ < $srcdir/po/POTFILES.in > po/POTFILES ]) # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) # ------------------------------- # Define VARIABLE to the location where catalog files will # be installed by po/Makefile. glib_DEFUN([GLIB_DEFINE_LOCALEDIR], [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl glib_save_prefix="$prefix" glib_save_exec_prefix="$exec_prefix" glib_save_datarootdir="$datarootdir" test "x$prefix" = xNONE && prefix=$ac_default_prefix test "x$exec_prefix" = xNONE && exec_prefix=$prefix datarootdir=`eval echo "${datarootdir}"` if test "x$CATOBJEXT" = "x.mo" ; then localedir=`eval echo "${libdir}/locale"` else localedir=`eval echo "${datadir}/locale"` fi prefix="$glib_save_prefix" exec_prefix="$glib_save_exec_prefix" datarootdir="$glib_save_datarootdir" AC_DEFINE_UNQUOTED($1, "$localedir", [Define the location where the catalogs will be installed]) ]) dnl dnl Now the definitions that aclocal will find dnl ifdef(glib_configure_ac,[],[ AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) ])dnl # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) # # Create a temporary file with TEST-FILE as its contents and pass the # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with # 0 and perform ACTION-IF-FAIL for any other exit status. AC_DEFUN([GLIB_RUN_PROG], [cat >conftest.foo <<_ACEOF $2 _ACEOF if AC_RUN_LOG([$1 conftest.foo]); then m4_ifval([$3], [$3], [:]) m4_ifvaln([$4], [else $4])dnl echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD fi]) dnl Do not call GNOME_DOC_DEFINES directly. It is split out from dnl GNOME_DOC_INIT to allow gnome-doc-utils to bootstrap off itself. AC_DEFUN([GNOME_DOC_DEFINES], [ AC_ARG_WITH([help-dir], AC_HELP_STRING([--with-help-dir=DIR], [path to help docs]),, [with_help_dir='${datadir}/gnome/help']) HELP_DIR="$with_help_dir" AC_SUBST(HELP_DIR) AC_ARG_WITH([omf-dir], AC_HELP_STRING([--with-omf-dir=DIR], [path to OMF files]),, [with_omf_dir='${datadir}/omf']) OMF_DIR="$with_omf_dir" AC_SUBST(OMF_DIR) AC_ARG_WITH([help-formats], AC_HELP_STRING([--with-help-formats=FORMATS], [list of formats]),, [with_help_formats='']) DOC_USER_FORMATS="$with_help_formats" AC_SUBST(DOC_USER_FORMATS) AC_ARG_ENABLE([scrollkeeper], [AC_HELP_STRING([--disable-scrollkeeper], [do not make updates to the scrollkeeper database])],, enable_scrollkeeper=yes) AM_CONDITIONAL([ENABLE_SK],[test "$gdu_cv_have_gdu" = "yes" -a "$enable_scrollkeeper" = "yes"]) dnl disable scrollkeeper automatically for distcheck DISTCHECK_CONFIGURE_FLAGS="--disable-scrollkeeper $DISTCHECK_CONFIGURE_FLAGS" AC_SUBST(DISTCHECK_CONFIGURE_FLAGS) AM_CONDITIONAL([HAVE_GNOME_DOC_UTILS],[test "$gdu_cv_have_gdu" = "yes"]) ]) # GNOME_DOC_INIT ([MINIMUM-VERSION],[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]) # AC_DEFUN([GNOME_DOC_INIT], [AC_REQUIRE([AC_PROG_LN_S])dnl if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) ifelse([$1],,[gdu_cv_version_required=0.3.2],[gdu_cv_version_required=$1]) AC_MSG_CHECKING([gnome-doc-utils >= $gdu_cv_version_required]) PKG_CHECK_EXISTS([gnome-doc-utils >= $gdu_cv_version_required], [gdu_cv_have_gdu=yes],[gdu_cv_have_gdu=no]) if test "$gdu_cv_have_gdu" = "yes"; then AC_MSG_RESULT([yes]) ifelse([$2],,[:],[$2]) else AC_MSG_RESULT([no]) ifelse([$3],,[AC_MSG_ERROR([gnome-doc-utils >= $gdu_cv_version_required not found])],[$3]) fi GNOME_DOC_DEFINES ]) dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) # serial 42 IT_PROG_INTLTOOL AC_DEFUN([IT_PROG_INTLTOOL], [ AC_PREREQ([2.50])dnl AC_REQUIRE([AM_NLS])dnl case "$am__api_version" in 1.[01234]) AC_MSG_ERROR([Automake 1.5 or newer is required to use intltool]) ;; *) ;; esac INTLTOOL_REQUIRED_VERSION_AS_INT=`echo $1 | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` INTLTOOL_APPLIED_VERSION=`intltool-update --version | head -1 | cut -d" " -f3` INTLTOOL_APPLIED_VERSION_AS_INT=`echo $INTLTOOL_APPLIED_VERSION | awk -F. '{ print $ 1 * 1000 + $ 2 * 100 + $ 3; }'` if test -n "$1"; then AC_MSG_CHECKING([for intltool >= $1]) AC_MSG_RESULT([$INTLTOOL_APPLIED_VERSION found]) test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge "$INTLTOOL_REQUIRED_VERSION_AS_INT" || AC_MSG_ERROR([Your intltool is too old. You need intltool $1 or later.]) fi AC_PATH_PROG(INTLTOOL_UPDATE, [intltool-update]) AC_PATH_PROG(INTLTOOL_MERGE, [intltool-merge]) AC_PATH_PROG(INTLTOOL_EXTRACT, [intltool-extract]) if test -z "$INTLTOOL_UPDATE" -o -z "$INTLTOOL_MERGE" -o -z "$INTLTOOL_EXTRACT"; then AC_MSG_ERROR([The intltool scripts were not found. Please install intltool.]) fi if test -z "$AM_DEFAULT_VERBOSITY"; then AM_DEFAULT_VERBOSITY=1 fi AC_SUBST([AM_DEFAULT_VERBOSITY]) INTLTOOL_V_MERGE='$(INTLTOOL__v_MERGE_$(V))' INTLTOOL__v_MERGE_='$(INTLTOOL__v_MERGE_$(AM_DEFAULT_VERBOSITY))' INTLTOOL__v_MERGE_0='@echo " ITMRG " [$]@;' AC_SUBST(INTLTOOL_V_MERGE) AC_SUBST(INTLTOOL__v_MERGE_) AC_SUBST(INTLTOOL__v_MERGE_0) INTLTOOL_V_MERGE_OPTIONS='$(intltool__v_merge_options_$(V))' intltool__v_merge_options_='$(intltool__v_merge_options_$(AM_DEFAULT_VERBOSITY))' intltool__v_merge_options_0='-q' AC_SUBST(INTLTOOL_V_MERGE_OPTIONS) AC_SUBST(intltool__v_merge_options_) AC_SUBST(intltool__v_merge_options_0) INTLTOOL_DESKTOP_RULE='%.desktop: %.desktop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_DIRECTORY_RULE='%.directory: %.directory.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KEYS_RULE='%.keys: %.keys.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -k -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_PROP_RULE='%.prop: %.prop.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_OAF_RULE='%.oaf: %.oaf.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -p $(top_srcdir)/po $< [$]@' INTLTOOL_PONG_RULE='%.pong: %.pong.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVER_RULE='%.server: %.server.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -o -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SHEET_RULE='%.sheet: %.sheet.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SOUNDLIST_RULE='%.soundlist: %.soundlist.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_UI_RULE='%.ui: %.ui.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_XML_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' if test "$INTLTOOL_APPLIED_VERSION_AS_INT" -ge 5000; then INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u --no-translations $< [$]@' else INTLTOOL_XML_NOMERGE_RULE='%.xml: %.xml.in $(INTLTOOL_MERGE) ; $(INTLTOOL_V_MERGE)_it_tmp_dir=tmp.intltool.[$][$]RANDOM && mkdir [$][$]_it_tmp_dir && LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u [$][$]_it_tmp_dir $< [$]@ && rmdir [$][$]_it_tmp_dir' fi INTLTOOL_XAM_RULE='%.xam: %.xml.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_KBD_RULE='%.kbd: %.kbd.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -m -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_CAVES_RULE='%.caves: %.caves.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SCHEMAS_RULE='%.schemas: %.schemas.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -s -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_THEME_RULE='%.theme: %.theme.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_SERVICE_RULE='%.service: %.service.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -d -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' INTLTOOL_POLICY_RULE='%.policy: %.policy.in $(INTLTOOL_MERGE) $(wildcard $(top_srcdir)/po/*.po) ; $(INTLTOOL_V_MERGE)LC_ALL=C $(INTLTOOL_MERGE) $(INTLTOOL_V_MERGE_OPTIONS) -x -u -c $(top_builddir)/po/.intltool-merge-cache $(top_srcdir)/po $< [$]@' _IT_SUBST(INTLTOOL_DESKTOP_RULE) _IT_SUBST(INTLTOOL_DIRECTORY_RULE) _IT_SUBST(INTLTOOL_KEYS_RULE) _IT_SUBST(INTLTOOL_PROP_RULE) _IT_SUBST(INTLTOOL_OAF_RULE) _IT_SUBST(INTLTOOL_PONG_RULE) _IT_SUBST(INTLTOOL_SERVER_RULE) _IT_SUBST(INTLTOOL_SHEET_RULE) _IT_SUBST(INTLTOOL_SOUNDLIST_RULE) _IT_SUBST(INTLTOOL_UI_RULE) _IT_SUBST(INTLTOOL_XAM_RULE) _IT_SUBST(INTLTOOL_KBD_RULE) _IT_SUBST(INTLTOOL_XML_RULE) _IT_SUBST(INTLTOOL_XML_NOMERGE_RULE) _IT_SUBST(INTLTOOL_CAVES_RULE) _IT_SUBST(INTLTOOL_SCHEMAS_RULE) _IT_SUBST(INTLTOOL_THEME_RULE) _IT_SUBST(INTLTOOL_SERVICE_RULE) _IT_SUBST(INTLTOOL_POLICY_RULE) # Check the gettext tools to make sure they are GNU AC_PATH_PROG(XGETTEXT, xgettext) AC_PATH_PROG(MSGMERGE, msgmerge) AC_PATH_PROG(MSGFMT, msgfmt) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) if test -z "$XGETTEXT" -o -z "$MSGMERGE" -o -z "$MSGFMT"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi xgversion="`$XGETTEXT --version|grep '(GNU ' 2> /dev/null`" mmversion="`$MSGMERGE --version|grep '(GNU ' 2> /dev/null`" mfversion="`$MSGFMT --version|grep '(GNU ' 2> /dev/null`" if test -z "$xgversion" -o -z "$mmversion" -o -z "$mfversion"; then AC_MSG_ERROR([GNU gettext tools not found; required for intltool]) fi AC_PATH_PROG(INTLTOOL_PERL, perl) if test -z "$INTLTOOL_PERL"; then AC_MSG_ERROR([perl not found]) fi AC_MSG_CHECKING([for perl >= 5.8.1]) $INTLTOOL_PERL -e "use 5.8.1;" > /dev/null 2>&1 if test $? -ne 0; then AC_MSG_ERROR([perl 5.8.1 is required for intltool]) else IT_PERL_VERSION=`$INTLTOOL_PERL -e "printf '%vd', $^V"` AC_MSG_RESULT([$IT_PERL_VERSION]) fi if test "x$2" != "xno-xml"; then AC_MSG_CHECKING([for XML::Parser]) if `$INTLTOOL_PERL -e "require XML::Parser" 2>/dev/null`; then AC_MSG_RESULT([ok]) else AC_MSG_ERROR([XML::Parser perl module is required for intltool]) fi fi # Substitute ALL_LINGUAS so we can use it in po/Makefile AC_SUBST(ALL_LINGUAS) # Set DATADIRNAME correctly if it is not set yet # (copied from glib-gettext.m4) if test -z "$DATADIRNAME"; then AC_LINK_IFELSE( [AC_LANG_PROGRAM([[]], [[extern int _nl_msg_cat_cntr; return _nl_msg_cat_cntr]])], [DATADIRNAME=share], [case $host in *-*-solaris*) dnl On Solaris, if bind_textdomain_codeset is in libc, dnl GNU format message catalog is always supported, dnl since both are added to the libc all together. dnl Hence, we'd like to go with DATADIRNAME=share dnl in this case. AC_CHECK_FUNC(bind_textdomain_codeset, [DATADIRNAME=share], [DATADIRNAME=lib]) ;; *) [DATADIRNAME=lib] ;; esac]) fi AC_SUBST(DATADIRNAME) IT_PO_SUBDIR([po]) ]) # IT_PO_SUBDIR(DIRNAME) # --------------------- # All po subdirs have to be declared with this macro; the subdir "po" is # declared by IT_PROG_INTLTOOL. # AC_DEFUN([IT_PO_SUBDIR], [AC_PREREQ([2.53])dnl We use ac_top_srcdir inside AC_CONFIG_COMMANDS. dnl dnl The following CONFIG_COMMANDS should be executed at the very end dnl of config.status. AC_CONFIG_COMMANDS_PRE([ AC_CONFIG_COMMANDS([$1/stamp-it], [ if [ ! grep "^# INTLTOOL_MAKEFILE$" "$1/Makefile.in" > /dev/null ]; then AC_MSG_ERROR([$1/Makefile.in.in was not created by intltoolize.]) fi rm -f "$1/stamp-it" "$1/stamp-it.tmp" "$1/POTFILES" "$1/Makefile.tmp" >"$1/stamp-it.tmp" [sed '/^#/d s/^[[].*] *// /^[ ]*$/d '"s|^| $ac_top_srcdir/|" \ "$srcdir/$1/POTFILES.in" | sed '$!s/$/ \\/' >"$1/POTFILES" ] [sed '/^POTFILES =/,/[^\\]$/ { /^POTFILES =/!d r $1/POTFILES } ' "$1/Makefile.in" >"$1/Makefile"] rm -f "$1/Makefile.tmp" mv "$1/stamp-it.tmp" "$1/stamp-it" ]) ])dnl ]) # _IT_SUBST(VARIABLE) # ------------------- # Abstract macro to do either _AM_SUBST_NOTMAKE or AC_SUBST # AC_DEFUN([_IT_SUBST], [ AC_SUBST([$1]) m4_ifdef([_AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE([$1])]) ] ) # deprecated macros AU_ALIAS([AC_PROG_INTLTOOL], [IT_PROG_INTLTOOL]) # A hint is needed for aclocal from Automake <= 1.9.4: # AC_DEFUN([AC_PROG_INTLTOOL], ...) # nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2010 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 1 (pkg-config-0.24) # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) # only at the first occurence in configure.ac, so if the first place # it's called might be skipped (such as if it is within an "if", you # have to call PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])# PKG_CHECK_MODULES # PKG_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable pkgconfigdir as the location where a module # should install pkg-config .pc files. By default the directory is # $libdir/pkgconfig, but the default can be changed by passing # DIRECTORY. The user can override through the --with-pkgconfigdir # parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) dnl PKG_INSTALLDIR # PKG_NOARCH_INSTALLDIR(DIRECTORY) # ------------------------- # Substitutes the variable noarch_pkgconfigdir as the location where a # module should install arch-independent pkg-config .pc files. By # default the directory is $datadir/pkgconfig, but the default can be # changed by passing DIRECTORY. The user can override through the # --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) dnl PKG_NOARCH_INSTALLDIR # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 Free Software # Foundation, Inc. # # This file 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. # serial 1 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.6], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.6])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file 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. # serial 1 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file 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. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 Free Software Foundation, Inc. # # This file 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. # serial 12 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file 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. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file 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. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008, 2011 Free Software Foundation, # Inc. # # This file 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. # serial 1 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file 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. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file 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. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file 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. # serial 6 # AM_PROG_CC_C_O # -------------- # Like AC_PROG_CC_C_O, but changed for automake. AC_DEFUN([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC_C_O])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl # FIXME: we rely on the cache variable name because # there is no other way. set dummy $CC am_cc=`echo $[2] | sed ['s/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/']` eval am_t=\$ac_cv_prog_cc_${am_cc}_c_o if test "$am_t" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi dnl Make sure AC_PROG_CC is never called again, or it will override our dnl setting of CC. m4_define([AC_PROG_CC], [m4_fatal([AC_PROG_CC cannot be called after AM_PROG_CC_C_O])]) ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file 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. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 Free Software Foundation, # Inc. # # This file 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. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 Free Software # Foundation, Inc. # # This file 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. # serial 5 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file 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. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2009, 2011 Free Software Foundation, Inc. # # This file 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. # serial 2 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # (`yes' being less verbose, `no' or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) case $enable_silent_rules in yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few `make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using `$V' instead of `$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001, 2003, 2005, 2011 Free Software Foundation, Inc. # # This file 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. # serial 1 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008, 2010 Free Software Foundation, Inc. # # This file 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. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005, 2012 Free Software Foundation, Inc. # # This file 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. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR gobby-0.5.0/TODO0000644000175000017500000000160512372017506010234 00000000000000Modernization: Replace unique by GtkApplication Replace GtkUIManager by GApplication/GMenu/GtkBuilder(?) Replace context menu by GMenu/GtkBuilder? Use the Undo interface of GtkSourceBuffer Use gsettings to store preferences Some features that would be nice for a final Gobby 0.5 release. We could perhaps do pre-releases with some of these missing before: - Add base preferences class with Preferences::Option definition to util/, inherit in core/, move ClosableFrame to util/ - Show in tab and userlist when others are typing, using an icon - Typing sounds (libcanberra?) These things need to be implemented in infinote, but again would be nice to have: - Show other user's viewport position in the scrollbar, instead or in addition to cursor position - Show what tab another user currently is in (needs cross-session user management as planned for the authentication business) gobby-0.5.0/config.sub0000755000175000017500000010612512067561707011542 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-10-10' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx | dvp \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mipsEE* | ee | ps2) basic_machine=mips64r5900el-scei case $os in -linux*) ;; *) os=-elf ;; esac ;; iop) basic_machine=mipsel-scei os=-irx ;; dvp) basic_machine=dvp-scei os=-elf ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -irx* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gobby-0.5.0/Makefile.am0000644000175000017500000000450512376161777011620 00000000000000SUBDIRS = m4 win32 code . icons po if HAVE_GNOME_DOC_UTILS SUBDIRS += help endif # Tell aclocal where to find `.m4' files. ACLOCAL_AMFLAGS = -I m4 dist_man_MANS = gobby-0.5.1 bin_PROGRAMS = gobby-0.5 gobby_0_5_LDADD = \ code/libgobby.a \ code/commands/libgobby-commands.a \ code/commands/file-tasks/libgobby-file-tasks.a \ code/operations/libgobby-operations.a \ code/dialogs/libgobby-dialogs.a \ code/core/libgobby-core.a \ code/util/libgobby-util.a \ $(gobby_LIBS) \ $(unique_LIBS) \ $(infinote_LIBS) \ $(LIBS) if WIN32 gobby_0_5_LDADD += -lws2_32 gobby_0_5_LDFLAGS = \ -Wl,--enable-runtime-pseudo-reloc \ -mwindows \ win32/gobby.res endif gobby_0_5_SOURCES = # .desktop file if !WIN32 desktopdir = $(datadir)/applications desktop_in_files = gobby-0.5.desktop.in desktop_DATA = $(desktop_in_files:.desktop.in=.desktop) appdatadir = $(datadir)/appdata appdata_DATA = gobby-0.5.appdata.xml endif clean-local: -rm -rf gobby-0.5.desktop @INTLTOOL_DESKTOP_RULE@ # Dummy C++ source to cause C++ linking, otherwise some platforms don't link # correctly against libstdc++. See also #399. Note that this file does not # (need to) exist in the source tree. nodist_EXTRA_gobby_0_5_SOURCES = dummy.cpp # Debian seems to need an XPM of the program icon, so we provide one here. # It's currently not used for anything else, though. EXTRA_DIST = gobby-0.5.xpm # For the manual EXTRA_DIST += gnome-doc-utils.make gobby-0.5.desktop.in gobby-0.5.appdata.xml DISTCLEANFILES = gnome-doc-utils.make DISTCHECK_CONFIGURE_FLAGS = --disable-scrollkeeper MAINTAINERCLEANFILES = \ ChangeLog distclean-local: if test "$(srcdir)" = "."; then :; else \ rm -f ChangeLog; \ fi ChangeLog: $(AM_V_GEN) if test -d "$(srcdir)/.git"; then \ (GIT_DIR=$(top_srcdir)/.git ./missing --run git log \ 6570cc49a6c2c29fe9cf4c85e3b74f133ae4c1f8..HEAD --stat=78) \ | fmt --split-only --width=78 > $@.tmp \ && cat $@.tmp ChangeLog.manual ChangeLog.pre-0.5 > $@ && $(RM) $@.tmp \ || ($(RM) $@.tmp; \ echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ (test -f $@ || echo git-log is required to generate this file >> $@)); \ else \ test -f $@ || \ (echo A git checkout and git-log is required to generate ChangeLog >&2 && \ echo A git checkout and git-log is required to generate this file >> $@); \ fi .PHONY: ChangeLog gobby-0.5.0/gobby-0.5.10000644000175000017500000000170312364474462011240 00000000000000.TH GOBBY 1 "August 17, 2006" .\" Please adjust this date whenever revising the manpage. .\" For manpage-specific macros: see man(7). .SH NAME .B gobby \- a collaborative text editor .SH SYNOPSIS .B gobby .RI [ options ] .RI [ file(s) ] .SH DESCRIPTION .B gobby is an editor which allows one to edit text documents and source files collaboratively over a network. Changes to the documents are synchronised instantly to the other clients. .PP .\".SH OPTIONS .\".TP .\"\fB\-j\fR, \fB\-\-join\fR=\fIHOST\fR:\fIPORT\fR .\"Joins the obby session on the specified host. .\".TP .\"\fB\-n\fR, \fB\-\-new\-instance\fR .\"Forces a new instance of Gobby to be created. .\".TP .\".B file(s) .\"Files passed on the command line will be opened within Gobby. If there is .\"already a Gobby instance running they will be opened therein, otherwise .\"a new hosted session will be created automatically. .PP .SH AUTHOR .B gobby was written by the 0x539 dev group . gobby-0.5.0/NEWS0000644000175000017500000001744112376161777010266 00000000000000Gobby ===== Version 0.5.0: * Allow to run a server within the Gobby process; infinoted is no longer required to connect to other people * Added support for user accounts and different permissions for different accounts * Added limited support for chat nodes in the document tree * Added an option to set the opacity with which user colors are shown behind the text. * Added Fullscreen option and Ctrl++ and Ctrl+- shortcuts to increase/decrease the font size. * Gobby can open infinote://XXX URIs given on the command line to directly open one or more documents at startup. Version 0.4.94: * Show cursors and selections of remote users in the own viewport and scrollbar * Add a "Disconnect from Server" option to the context menu * When double-clicking a user in the user list jump to its current cursor position * Allow gobby to be built against GTK+ 3 * Fixed a bug which prevented "Save All" from working Version 0.4.93: * Added IRC-like chat * Added functionality to export a document to HTML (#245) * Sort browser entries * Allow selecting multiple files when opening files * Allow resetting user colors in a document (Bug #211) * Added a Connect to Server option to the File menu * Undo words instead of individual characters * When starting Gobby twice then send commands to an existing Gobby (if any) unless the -n command line option is given. * Added an option to highlight spaces and tabs Version 0.4.92: * Support running Gobby on Windows 2000. * Added Icons for HCLP and HCLPI icon themes (Bug #413, Patrick Wade). * Make sure terminating newline characters are saved correctly * Added /etc/ssl/certs/ca-certificates.crt as default trust file, if available. * Don't mess up saving documents whose first line is empty. * Write config files in $XDG_CONFIG_HOME instead of $HOME (Bug #437, Cristian Klein). * Display colored pencil icons in a document's tab for each user that made a change since the document has been viewed the last time (Bug #66, Mattis Manzel). Version 0.4.91: * Keep track of a document's modified state between Undo/Redo operations * Scroll to Cursor after Cut or Paste * Added HCLPI icon of the Gobby Logo (Thanks to Thomas Glatt) * Added an Autosave Option in the preferences * Remember previous host names in "Direct Connection" entry * Added an "Open Location" dialog to open arbitrary URIs * Added a tooltip when hovering text, showing the author of that text Version 0.4.90: * Use libinfinity instead of libobby as backend * Allow connection to multiple servers * Redesigned UI to better match normal text editors, and to be more HIG-compliant * Added Undo support (via libinfinity) * Require GtkSourceView 2.x * Some features of the previous versions, especially self-hosting, are not implemented in 0.4.90. This will be added in a later version. Version 0.4.6: * Require gtksourceview 1.8 to enable indent-on-tab * Require obby 0.4.5 to support IPv6 autodiscovery * Several utility windows close on escape * Compilation fixes for gtksourceview 2.0 * New (partial) translations: - Brazilian Portuguese - Polish - Korean Version 0.4.5: * Important bugfixes: - fixed the save routine for files not encoded in UTF-8 - allow Gobby to run inside paths containing non-ASCII characters Version 0.4.4: * Fixed two crashes: one on Windows Vista related to the chat widget, and one triggered on rejoins with multiple documents opened in the editor * GtkSourceView's C API is called directly * The document list is now sorted alphabetically * New translations: - Italian - Russian Version 0.4.3: * Find and Goto dialogs are now focused when invoked * Zeroconf failures are now only printed on the console, no dialog is invoked * Preference option added to subscribe automatically to all documents in a session * Doubleclicks on documents in the user list now opens them if they are not already opened * Window highlights itself only if the chat widget is open * Toolbar style "text besides icon" is now supported * Tab bar is only shown if more than one document is opened Version 0.4.2: * Gobby now opens absolute file names passed via command line * View is now kept when remote operations affect the current position, through appropriate scrolling * Documents could be subscribed by double-clicking on them in the list * Local files are not flagged as modified anymore * Urgency hint is now configurable * Windows compilation fixes Version 0.4.1: * Release with no further important changes. Version 0.4.0: * Session encryption through GNUTLS * Reduced CPU usage and memory footprint through the removal of one supplemental document copy * Usability enhancements: - New button to close the chat window - Font types and sizes could now be set for the text editor from within Gobby - Documents could now be switched using Ctrl-Alt-Page-Down and Ctrl-Alt-Page-Up - Subscribe button is deactivated after it has been hit once for a document - Documents with the same name are suffixed with a number - Dialogs to host and join sessions are respawned if the attempt failed - Application highlights itself on new chat messages - Documents could be opened in an existing Gobby session by passing their filename as a command-line argument to the application - Sessions could be joined by passing the host and port via command-line options - User-modified colour palettes are now saved in the configuration Version 0.3.0: * This release depends on net6 1.2.0 and obby 0.3.0, it is *not* backwards- compatible protocol-wise to the 0.2.x series. * No more pending changes due to the new merging algorithm * Cursor is left-gravity now, which relieves some problems with newlines * Joins are now threaded and thus abortable * Connection status is displayed in the status bar * Lines in the chat log are now wrapped to the display width * Session serialisation and restore * Name and colour could be changed directly when they are already in use * User and document list are now separate windows, their position and state is preserved by default * Close document now just unsubscribes from the document * Scrollable document folder * Search and replace * New translations: - Swedish (complete) - Catalan (partial) - Chinese (partial) - Spanish (almost complete) Version 0.2.2: * Gobby no longer crashes when a document is closed after quitting a session, spotted and fixed by Kanru Chen. * Some new file extensions are mapped to their corresponding MIME type * Files saved are no longer converted to the charset settings of the current locale * Line endings of loaded files are now unified to result only in UNIX ones * Added Spanish translation, thanks to Mario Palomo Version 0.2.1: * This bugfix release features a recompile of the Windows version against more hardware-independent libraries. Version 0.2.0: * This version is *not* backwards-compatible to 0.1.0 due to heavy changes within obby. It depends on obby 0.2.0 and net6 1.1.0. * New features (in no particular order): - Document subscriptions - Global session passwords - Basic user authentication to protect the nickname - Preferences pane - Zeroconf support - Colour presets - Colour changes from within the session - Auto indentation - Drag'n'drop of documents into the session - Create document works without a delay - Better Win32 network handling * Changes in the build system: - It is now required to provide `gtksourceview-1.0', the depedency is no more optional. - Gobby now links against `gthread-2.0' which is included in `glibmm-2.4'. Version 0.1.1: * Bugfix release: Include contrib/gobby.desktop to fix the non-working build when configured ``--with-gnome''. Version 0.1.0: * Initial release. gobby-0.5.0/missing0000755000175000017500000002415212067604151011144 00000000000000#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and \`g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gobby-0.5.0/depcomp0000755000175000017500000005064312067604151011126 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gobby-0.5.0/gobby-0.5.xpm0000644000175000017500000001767112364474462011717 00000000000000/* XPM */ static char * gobby_0_5_xpm[] = { "32 32 368 2", " c None", ". c #404040", "+ c #666666", "@ c #646464", "# c #585858", "$ c #4E4E4E", "% c #474747", "& c #464646", "* c #585658", "= c #909090", "- c #EDEDED", "; c #F4F4F4", "> c #FEFEFE", ", c #FDFDFD", "' c #FCFCFC", ") c #FBFBFB", "! c #FAFAF9", "~ c #F9F9F8", "{ c #F8F8F7", "] c #F7F7F6", "^ c #F6F6F5", "/ c #F5F5F4", "( c #F3F3F3", "_ c #BEBBBE", ": c #676667", "< c #551B13", "[ c #814D35", "} c #632F22", "| c #8F8F8F", "1 c #F1F1F1", "2 c #FAFAFA", "3 c #F9F9F9", "4 c #F8F8F8", "5 c #F7F7F7", "6 c #F6F6F6", "7 c #F4F4F3", "8 c #F3F3F2", "9 c #C4C2C3", "0 c #E0DFE0", "a c #5C5B5C", "b c #A55B50", "c c #5E281B", "d c #704B35", "e c #763E2B", "f c #DBDBDB", "g c #D8D8D8", "h c #D7D7D6", "i c #D6D6D5", "j c #D5D5D4", "k c #D4D4D3", "l c #D3D3D2", "m c #D9D9D8", "n c #F2F2F2", "o c #C1BFC1", "p c #C8C7C7", "q c #703F3A", "r c #AC5547", "s c #922B1C", "t c #612016", "u c #5F261A", "v c #080503", "w c #110E0A", "x c #1E1C19", "y c #8A8A8A", "z c #F5F5F5", "A c #E8E8E8", "B c #E7E7E7", "C c #E6E6E6", "D c #E5E5E5", "E c #E4E4E3", "F c #E3E3E2", "G c #E2E2E1", "H c #EBEBEA", "I c #ABAAAB", "J c #ACAAAB", "K c #A0999B", "L c #99574F", "M c #9B3524", "N c #932D1B", "O c #812719", "P c #60160E", "Q c #000000", "R c #020101", "S c #5C5C5B", "T c #DBDBDA", "U c #DADADA", "V c #DADAD9", "W c #D8D8D7", "X c #D6D6D6", "Y c #DDDDDD", "Z c #EAEAEA", "` c #F0F0EF", " . c #E7E7E6", ".. c #9F7873", "+. c #AF5C4D", "@. c #962E1C", "#. c #8E2B1A", "$. c #772314", "%. c #020201", "&. c #040301", "*. c #EEEEEE", "=. c #D9D9D9", "-. c #E5E5E3", ";. c #9B635B", ">. c #A03C2B", ",. c #942D1C", "'. c #832819", "). c #5B130C", "!. c #533B13", "~. c #452F0F", "{. c #36230A", "]. c #3A2309", "^. c #44290B", "/. c #A4A4A3", "(. c #EAEAE9", "_. c #D3D3D3", ":. c #D1D1D1", "<. c #D0D0D0", "[. c #CFCFCF", "}. c #AF9593", "|. c #AD5D50", "1. c #972E1C", "2. c #8F2C1A", "3. c #722014", "4. c #D8942E", "5. c #DF922B", "6. c #D98624", "7. c #C4751D", "8. c #6A4F2F", "9. c #757162", "0. c #56544D", "a. c #BCBCBC", "b. c #D5D5D5", "c. c #D2D2D2", "d. c #D2D2D1", "e. c #D1D1D0", "f. c #E5E5E4", "g. c #EEEEED", "h. c #9C6963", "i. c #A54635", "j. c #952D1C", "k. c #842819", "l. c #5A120B", "m. c #DD9029", "n. c #D98825", "o. c #B56D1C", "p. c #948E7B", "q. c #E9E0C6", "r. c #FAF1D3", "s. c #EFE6C7", "t. c #AFAA98", "u. c #C4C4C3", "v. c #CECECD", "w. c #CDCDCC", "x. c #CDC1C0", "y. c #A45D52", "z. c #982F1D", "A. c #902C1B", "B. c #6D1C12", "C. c #130C03", "D. c #D78422", "E. c #D57F20", "F. c #736F61", "G. c #F5EDD1", "H. c #FAF3DD", "I. c #FAF2D6", "J. c #EAE3CC", "K. c #79766E", "L. c #D0D0CF", "M. c #CFCFCE", "N. c #E0E0DF", "O. c #EFEFEE", "P. c #9F7471", "Q. c #AA4E3F", "R. c #862919", "S. c #500E09", "T. c #A9651A", "U. c #2D1A07", "V. c #D6D0BA", "W. c #AEA999", "X. c #B5B0A0", "Y. c #BBB6A7", "Z. c #B5AE9D", "`. c #A19B8A", " + c #A9A491", ".+ c #E8E6E5", "++ c #9E6058", "@+ c #9C3220", "#+ c #912C1B", "$+ c #6C271E", "%+ c #212932", "&+ c #4C3B2A", "*+ c #3E2509", "=+ c #EBE3CD", "-+ c #B0812D", ";+ c #DE9F34", ">+ c #D2912E", ",+ c #E0942C", "'+ c #895518", ")+ c #BBB5A1", "!+ c #CBCBCA", "~+ c #AA8A87", "{+ c #AB5143", "]+ c #982E1C", "^+ c #852818", "/+ c #694643", "(+ c #151C22", "_+ c #485B6D", ":+ c #7694B4", "<+ c #6F859A", "[+ c #4B443C", "}+ c #EFE9D2", "|+ c #B17E29", "1+ c #E6A033", "2+ c #E2982E", "3+ c #DD8F29", "4+ c #835117", "5+ c #B9B3A0", "6+ c #C5C5C5", "7+ c #CCCCCC", "8+ c #9C655E", "9+ c #9F3625", "0+ c #912D1B", "a+ c #7B3C35", "b+ c #807E7D", "c+ c #47586B", "d+ c #728FAE", "e+ c #708EAC", "f+ c #6E8BA8", "g+ c #868B8F", "h+ c #ECE4CE", "i+ c #8E6322", "j+ c #DE912A", "k+ c #DA8825", "l+ c #5F3F1D", "m+ c #BAB5A1", "n+ c #A99796", "o+ c #A45144", "p+ c #992F1C", "q+ c #84281A", "r+ c #A18583", "s+ c #818181", "t+ c #232A30", "u+ c #6C87A4", "v+ c #6B87A4", "w+ c #6A86A2", "x+ c #6884A0", "y+ c #717F8C", "z+ c #DBD4BE", "A+ c #4C412A", "B+ c #DC8E29", "C+ c #DA8926", "D+ c #C8791F", "E+ c #36331F", "F+ c #AEA996", "G+ c #9B9B9B", "H+ c #956660", "I+ c #A33D2C", "J+ c #804740", "K+ c #2D343C", "L+ c #657F9A", "M+ c #647E9A", "N+ c #637D98", "O+ c #53697C", "P+ c #4F5E56", "Q+ c #8D887A", "R+ c #697560", "S+ c #5F552A", "T+ c #644B1B", "U+ c #4D5828", "V+ c #556B4C", "W+ c #606754", "X+ c #2B412B", "Y+ c #C7C8C7", "Z+ c #EBEAE8", "`+ c #8A4439", " @ c #9B2F1D", ".@ c #822B1D", "+@ c #B5A09D", "@@ c #DCDCDB", "#@ c #2D363F", "$@ c #5E7690", "%@ c #5D768F", "&@ c #596E85", "*@ c #47594B", "=@ c #93C393", "-@ c #6E976E", ";@ c #6FA46F", ">@ c #6AAC6A", ",@ c #57A257", "'@ c #439743", ")@ c #2A7E2A", "!@ c #2E882E", "~@ c #2E892E", "{@ c #374B37", "]@ c #DED9D3", "^@ c #905943", "/@ c #75291C", "(@ c #7E4942", "_@ c #E3E3E1", ":@ c #24282A", "<@ c #252C32", "[@ c #374553", "}@ c #3B4848", "|@ c #6AA36A", "1@ c #70AF70", "2@ c #67AB67", "3@ c #5CA55C", "4@ c #4D9D4D", "5@ c #3E943E", "6@ c #2F8C2F", "7@ c #286628", "8@ c #969795", "9@ c #CFC3B7", "0@ c #A07559", "a@ c #95725A", "b@ c #D9D3CD", "c@ c #E1E1E0", "d@ c #324332", "e@ c #4E9D4E", "f@ c #4A9B4A", "g@ c #449744", "h@ c #3B923B", "i@ c #2B802B", "j@ c #676F67", "k@ c #96877A", "l@ c #AB9380", "m@ c #E8E8E6", "n@ c #E9E9E8", "o@ c #233823", "p@ c #2B812B", "q@ c #287328", "r@ c #5F685F", "s@ c #CBCBC9", "t@ c #C6C6C5", "u@ c #CACAC9", "v@ c #D2D2D0", "w@ c #E0E0E0", "x@ c #323E32", "y@ c #273F27", "z@ c #294929", "A@ c #2A4D2A", "B@ c #2A542A", "C@ c #295829", "D@ c #295129", "E@ c #2B4E2B", "F@ c #345134", "G@ c #405440", "H@ c #676F66", "I@ c #B4B4B4", "J@ c #C2C2C1", "K@ c #B3B3B2", "L@ c #AEAEAC", "M@ c #A9A9A8", "N@ c #6A6A6A", "O@ c #616161", "P@ c #898989", "Q@ c #828282", "R@ c #858585", "S@ c #888888", "T@ c #878787", "U@ c #848484", "V@ c #848483", "W@ c #838383", "X@ c #838382", "Y@ c #7E7E7E", "Z@ c #727272", "`@ c #4A4A49", " ", " ", " ", " . + @ # $ % % % % % % % & & * ", " = - ; > , ' ) ! ~ { ] ^ / ( _ : < [ } ", " | 1 ( , ' ) 2 3 4 5 6 / 7 8 9 0 a b c d e ", " | - ( f g g h i j k l m ( n o / p q r s t u ", " v w x y ' z A B C C D E F G H I J K L M N O P ", " Q Q Q Q R S z F T U V m W X Y Z ` ...+.@.#.$. ", " %.&.Q Q Q Q Q *.*.U =.=.W h i F A A -.;.>.,.'.). ", " Q !.~.{.].^.Q /.(.i j _.l :.<.[.j W }.|.1.2.3. ", " Q 4.5.6.7.8.9.0.a.X b.k l c.d.e.f.g.h.i.j.k.l. ", " Q m.n.o.p.q.r.s.t.u.c.c.:.<.[.v.w.x.y.z.A.B. ", " C.D.E.F.G.H.H.I.J.K.c.d.e.L.M.N.O.P.Q.1.R.S. ", " T.U.V.W.X.Y.Z.`. +c.:.<.[.v.w..+++@+#+$+ ", " %+&+*+=+-+;+>+,+'+)+!+e.L.M.v.=.~+{+]+^+/+ ", " (+_+:+<+[+}+|+1+2+3+4+5+6+<.[.v.w.7+8+9+0+a+b+ ", " c+d+e+f+g+h+i+2+j+k+l+m+M.L.M.v.w.n+o+p+q+r+s+ ", "t+u+v+w+x+y+z+A+B+C+D+E+F+G+M.v.w.7+H+I+N J+h s+ ", "K+L+M+N+O+P+Q+R+S+T+U+V+W+X+Y+` O.Z+`+ @.@+@@@s+ ", "#@$@%@&@*@=@-@;@>@,@'@)@!@~@{@i g.]@^@/@(@_@<.s+ ", ":@<@[@}@|@1@2@3@4@5@6@6@6@6@7@8@H 9@0@a@b@G c@s+ ", " # d@e@f@g@h@6@6@6@6@6@6@i@j@F k@l@m@n@G h s+ ", " o@p@6@6@6@6@6@6@6@6@6@q@r@N.-.s@t@u@v@w@s+ ", " x@y@z@A@B@C@D@E@F@G@H@I@(.H G J@K@L@M@N@ ", " O@P@Q@s+R@S@T@R@U@U@V@W@W@X@Y@Z@+ `@ ", " ", " ", " ", " ", " ", " "}; gobby-0.5.0/install-sh0000755000175000017500000003325612067604151011556 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for `test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gobby-0.5.0/code/0000755000175000017500000000000012376162132010534 500000000000000gobby-0.5.0/code/window.cpp0000644000175000017500000003322512370704570012476 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "features.hpp" #include "window.hpp" #include "commands/file-tasks/task-open.hpp" #include "commands/file-tasks/task-open-multiple.hpp" #include "core/iconmanager.hpp" #include "util/i18n.hpp" #include "util/gtk-compat.hpp" #include Gobby::Window::Window(unsigned int argc, const char* const argv[], Config& config, Preferences& preferences, const IconManager& icon_manager, CertificateManager& cert_manager #ifdef WITH_UNIQUE , UniqueApp* app #endif ): Gtk::Window(Gtk::WINDOW_TOPLEVEL), m_argc(argc), m_argv(argv), m_config(config), m_lang_manager(gtk_source_language_manager_get_default()), m_preferences(preferences), m_cert_manager(cert_manager), m_icon_manager(icon_manager), m_connection_manager(cert_manager, preferences), #ifdef WITH_UNIQUE m_app(app), #endif m_text_folder(false, m_preferences, m_lang_manager), m_chat_folder(true, m_preferences, m_lang_manager), m_statusbar(*this, m_text_folder, m_preferences), m_header(m_preferences, m_lang_manager), m_browser(*this, m_statusbar, m_connection_manager), m_chat_frame(_("Chat"), IconManager::STOCK_CHAT, m_preferences.appearance.show_chat), m_info_storage(INF_GTK_BROWSER_MODEL(m_browser.get_store())), m_folder_manager(m_browser, m_info_storage, m_text_folder, m_chat_folder), m_operations(m_info_storage, m_browser, m_folder_manager, m_statusbar), m_auth_commands(*this, m_browser, m_statusbar, m_connection_manager, m_preferences), m_self_hoster(m_connection_manager.get_io(), m_connection_manager.get_communication_manager(), m_connection_manager.get_publisher(), m_auth_commands.get_sasl_context(), m_statusbar, m_cert_manager, m_preferences), m_browser_commands(m_browser, m_folder_manager, m_statusbar, m_operations, m_preferences), m_browser_context_commands(*this, m_connection_manager.get_io(), m_browser, m_file_chooser, m_operations, m_cert_manager, m_preferences), m_autosave_commands(m_text_folder, m_operations, m_info_storage, m_preferences), m_subscription_commands(m_text_folder, m_chat_folder), m_synchronization_commands(m_text_folder, m_chat_folder), m_user_join_commands(m_folder_manager, m_preferences), m_text_folder_commands(m_text_folder), m_chat_folder_commands(m_chat_folder), m_file_commands(*this, m_header, m_browser, m_folder_manager, m_statusbar, m_file_chooser, m_operations, m_info_storage, m_preferences), m_edit_commands(*this, m_header, m_text_folder, m_statusbar, m_file_chooser, m_preferences, m_cert_manager), m_view_commands(*this, m_header, m_text_folder, m_chat_frame, m_chat_folder, m_preferences), m_help_commands(*this, m_header, m_icon_manager), m_title_bar(*this, m_text_folder) { #ifdef WITH_UNIQUE g_object_ref(app); unique_app_watch_window(app, gobj()); g_signal_connect(app, "message-received", G_CALLBACK(on_message_received_static), this); #endif // WITH_UNIQUE m_chat_frame.signal_show().connect( sigc::mem_fun(*this, &Window::on_chat_show), true); m_chat_frame.signal_hide().connect( sigc::mem_fun(*this, &Window::on_chat_hide), false); m_browser.add_browser(INF_BROWSER(m_self_hoster.get_directory()), _("This Computer")); m_header.show(); m_browser.show(); m_text_folder.show(); m_chat_folder.show(); // Build UI Glib::RefPtr group = m_header.get_accel_group(); // Add focus shortcuts; unfortunately gtkmm does not wrap that API GClosure* closure = g_cclosure_new( G_CALLBACK(on_switch_to_chat_static), this, NULL); gtk_accel_group_connect(group->gobj(), GDK_KEY_m, GDK_CONTROL_MASK, static_cast(0), closure); //g_closure_unref(closure); GClosure* closure2 = g_cclosure_new( G_CALLBACK(on_switch_to_text_static), this, NULL); gtk_accel_group_connect(group->gobj(), GDK_KEY_m, static_cast( GDK_CONTROL_MASK | GDK_SHIFT_MASK), static_cast(0), closure2); //g_closure_unref(closure2); add_accel_group(group); Gtk::Frame* frame_browser = Gtk::manage(new ClosableFrame( _("Document Browser"), IconManager::STOCK_DOCLIST, m_preferences.appearance.show_browser)); frame_browser->set_shadow_type(Gtk::SHADOW_IN); frame_browser->add(m_browser); // frame_browser manages visibility itself Gtk::Frame* frame_text = Gtk::manage(new Gtk::Frame); frame_text->set_shadow_type(Gtk::SHADOW_IN); frame_text->add(m_text_folder); frame_text->show(); m_chat_frame.set_shadow_type(Gtk::SHADOW_IN); m_chat_frame.add(m_chat_folder); // frame_chat manages visibility itself m_chat_paned.pack1(*frame_text, true, false); m_chat_paned.pack2(m_chat_frame, false, false); m_chat_paned.show(); m_paned.pack1(*frame_browser, false, false); m_paned.pack2(m_chat_paned, true, false); m_paned.show(); m_mainbox.pack_start(m_header, Gtk::PACK_SHRINK); m_mainbox.pack_start(m_paned, Gtk::PACK_EXPAND_WIDGET); m_mainbox.pack_start(m_statusbar, Gtk::PACK_SHRINK); m_mainbox.show(); // Give initial focus to the browser, which will in turn give focus // to the "Direct Connection" expander, so people can quickly // get going. set_focus_child(m_browser); add(m_mainbox); set_default_size(800, 600); set_role("Gobby"); } Gobby::Window::~Window() { #ifdef WITH_UNIQUE g_object_unref(m_app); #endif } bool Gobby::Window::on_delete_event(GdkEventAny* event) { #if 0 if(m_buffer.get() == NULL) return false; if(!m_buffer->is_open() ) return false; Gtk::MessageDialog dlg( *this, _("You are still connected to a session"), false, Gtk::MESSAGE_WARNING, Gtk::BUTTONS_NONE, true ); dlg.set_secondary_text( _("Do you want to close Gobby nevertheless?") ); Gtk::Image* img = Gtk::manage(new Gtk::Image(Gtk::Stock::CANCEL, Gtk::ICON_SIZE_BUTTON)); Gtk::Button* cancel_button = dlg.add_button(_("C_ancel"), Gtk::RESPONSE_CANCEL); dlg.add_button(Gtk::Stock::CLOSE, Gtk::RESPONSE_YES); cancel_button->set_image(*img); cancel_button->grab_focus(); return dlg.run() != Gtk::RESPONSE_YES; #endif return false; } // GtkWindow catches keybindings for the menu items _before_ passing them to // the focused widget. This is unfortunate and means that pressing ctrl+V // in an entry on the browser ends up pasting text in the TextView. // Here we override GtkWindow's handler to do the same things that it // does, but in the opposite order and then we chain up to the grand // parent handler, skipping Gtk::Window::key_press_event(). // This code is basically stolen from gedit, but ported to C++. bool Gobby::Window::on_key_press_event(GdkEventKey* event) { // We can't let GtkSourceView handle this, since we override // Undo/Redo. TODO: This is a bit of a hack. A proper solution would // perhaps be to subclass GtkSourceView, and either // unregister/reregister the keybinding there, or making sure the // key-press-event default handler returns false. // TODO: An even properer solution is to use the new GtkSourceView3 // feature which allows to plug a different undo manager to the // SourceView. This would also make the Undo/Redo context menu items // work. if(event->keyval == GDK_KEY_z || event->keyval == GDK_KEY_Z) return Gtk::Window::on_key_press_event(event); bool handled = gtk_window_propagate_key_event(gobj(), event); if(!handled) handled = gtk_window_activate_key(gobj(), event); // Skip Gtk::Window default handler here: if(!handled) handled = Gtk::Container::on_key_press_event(event); return handled; } void Gobby::Window::on_realize() { Gtk::Window::on_realize(); m_paned.set_position(m_paned.get_width() * 2 / 5); m_chat_paned.set_position(m_chat_paned.get_height() * 7 / 10); } void Gobby::Window::on_show() { Gtk::Window::on_show(); if(!m_config.get_root()["initial"].get_value("run", false)) { m_initial_dlg.reset( new InitialDialog( *this, m_statusbar, m_preferences, m_cert_manager, m_icon_manager)); m_initial_dlg->present(); m_initial_dlg->signal_hide().connect( sigc::mem_fun(*this, &Window::on_initial_dialog_hide)); } // Open infinote:// URIs passed on the command line std::vector filenames; for(int i = 0; i < m_argc; ++i) { if(g_str_has_prefix(m_argv[i], "infinote://")) connect_to_host(m_argv[i]); else filenames.push_back(m_argv[i]); } // Open files passed on the command line if(filenames.size() == 1) { Glib::RefPtr file( Gio::File::create_for_commandline_arg(filenames[0])); m_file_commands.set_task(new TaskOpen(m_file_commands, file)); } else if(filenames.size() > 1) { TaskOpenMultiple* task = new TaskOpenMultiple(m_file_commands); for(std::vector::const_iterator iter = filenames.begin(); iter != filenames.end(); ++iter) { Glib::RefPtr file( Gio::File::create_for_commandline_arg(*iter)); task->add_file(file->get_uri()); } m_file_commands.set_task(task); } // To avoid doing this again, should on_show() be called again: m_argc = 0; m_argv = NULL; } void Gobby::Window::on_initial_dialog_hide() { m_initial_dlg.reset(NULL); // Don't show again m_config.get_root()["initial"].set_value("run", true); } bool Gobby::Window::on_switch_to_chat() { SessionView* view = m_chat_folder.get_current_document(); if(!view) return false; ChatSessionView* chat_view = dynamic_cast(view); if(!chat_view) return false; m_preferences.appearance.show_chat = true; InfGtkChat* chat = chat_view->get_chat(); GtkWidget* entry = inf_gtk_chat_get_entry(chat); gtk_widget_grab_focus(GTK_WIDGET(entry)); return true; } bool Gobby::Window::on_switch_to_text() { SessionView* view = m_text_folder.get_current_document(); if(!view) return false; TextSessionView* text_view = dynamic_cast(view); if(!text_view) return false; GtkSourceView* gtk_view = text_view->get_text_view(); gtk_widget_grab_focus(GTK_WIDGET(gtk_view)); // TODO: Turn chat back off if previously activated // via on_switch_to_chat()? return true; } void Gobby::Window::on_chat_hide() { Gtk::Widget* focus = get_focus(); // Actually this always returns NULL if m_chat_frame has focus, // because the focus is removed again. I think it's good enough // though. if(focus == NULL || focus == &m_chat_frame || focus->is_ancestor(m_chat_frame)) { on_switch_to_text(); } } void Gobby::Window::on_chat_show() { Gtk::Widget* focus = get_focus(); if(!focus) on_switch_to_chat(); } #ifdef WITH_UNIQUE UniqueResponse Gobby::Window::on_message_received(UniqueCommand command, UniqueMessageData* message, guint time) try { struct uris_holder { uris_holder(gchar** uris): uris(uris) {} ~uris_holder() { if(uris) g_strfreev(uris); } operator gchar* const*() const { return uris; } gchar** uris; private: uris_holder(const uris_holder&); uris_holder& operator=(const uris_holder&); }; // Cast to int to suppress a warning about UNIQUE_GOBBY_CONNECT not // being a member of the UniqueCommand enum. switch (static_cast(command)) { case UNIQUE_ACTIVATE: gtk_window_set_screen(gobj(), unique_message_data_get_screen(message)); present(time); return UNIQUE_RESPONSE_OK; case UNIQUE_OPEN: { uris_holder uris( unique_message_data_get_uris(message)); if(!uris || !uris[0]) return UNIQUE_RESPONSE_FAIL; if(uris[1]) // multiple files? { TaskOpenMultiple* task = new TaskOpenMultiple(m_file_commands); for(const gchar* const* p = uris; *p; ++p) task->add_file(*p); m_file_commands.set_task(task); } else { TaskOpen* task = new TaskOpen( m_file_commands, Gio::File::create_for_uri(*uris)); m_file_commands.set_task(task); } return UNIQUE_RESPONSE_OK; } case UNIQUE_GOBBY_CONNECT: { uris_holder uris(unique_message_data_get_uris(message)); if(!uris || !uris[0]) return UNIQUE_RESPONSE_FAIL; for(const gchar* const* p = uris; *p; ++p) { const gchar protocol[] = "infinote://"; if(!g_str_has_prefix(*p, protocol)) return UNIQUE_RESPONSE_FAIL; connect_to_host(*p + sizeof(protocol) - 1); } return UNIQUE_RESPONSE_OK; } default: return UNIQUE_RESPONSE_PASSTHROUGH; } } // For example, connect_to_host might throw Glib::ThreadError catch(const Glib::Exception& error) { // TODO: Do we want to show a dialog here? g_warning("Failed to process IPC message: %s", error.what().c_str()); return UNIQUE_RESPONSE_FAIL; } catch (...) { g_assert_not_reached(); return UNIQUE_RESPONSE_FAIL; } #endif // WITH_UNIQUE gobby-0.5.0/code/Makefile.in0000644000175000017500000005311312376162111012521 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = code DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/features.hpp.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ libgobby_a_AR = $(AR) $(ARFLAGS) libgobby_a_LIBADD = am_libgobby_a_OBJECTS = main.$(OBJEXT) window.$(OBJEXT) libgobby_a_OBJECTS = $(am_libgobby_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgobby_a_SOURCES) DIST_SOURCES = $(libgobby_a_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ SUBDIRS = util core dialogs operations commands noinst_LIBRARIES = libgobby.a libgobby_a_SOURCES = \ main.cpp \ window.cpp noinst_HEADERS = window.hpp appicondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/gobby-0.5 AM_CPPFLAGS = $(gobby_CFLAGS) $(unique_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code all: features.hpp $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(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) --foreign code/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign code/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): features.hpp: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/features.hpp.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status code/features.hpp $(srcdir)/features.hpp.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f features.hpp stamp-h1 clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libgobby.a: $(libgobby_a_OBJECTS) $(libgobby_a_DEPENDENCIES) $(EXTRA_libgobby_a_DEPENDENCIES) $(AM_V_at)-rm -f libgobby.a $(AM_V_AR)$(libgobby_a_AR) libgobby.a $(libgobby_a_OBJECTS) $(libgobby_a_LIBADD) $(AM_V_at)$(RANLIB) libgobby.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/window.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done 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: tags-recursive $(HEADERS) $(SOURCES) features.hpp.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) features.hpp.in $(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: ctags-recursive $(HEADERS) $(SOURCES) features.hpp.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) features.hpp.in $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LIBRARIES) $(HEADERS) features.hpp installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-recursive clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-recursive 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: gobby-0.5.0/code/util/0000755000175000017500000000000012376162131011510 500000000000000gobby-0.5.0/code/util/config.hpp0000644000175000017500000003030712370427450013413 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CONFIG_HPP_ #define _GOBBY_CONFIG_HPP_ #include "serialize.hpp" #include #include #include #include #include // TODO: Use registry on windows, gconf with gnome #include #include namespace Gobby { namespace serialize { /** @brief Used to convert Gdk::Color to a string. */ template<> class default_context_to: public context_base_to { public: typedef Gdk::Color data_type; virtual std::string to_string(const data_type& from) const; }; /** @brief Used to convert a string to Gdk::Color. */ template<> class default_context_from: public context_base_from { public: typedef Gdk::Color data_type; virtual data_type from_string(const std::string& from) const; }; template<> class default_context_to: public context_base_to { public: typedef Glib::ustring data_type; virtual std::string to_string(const data_type& from) const; }; template<> class default_context_from: public context_base_from { public: typedef Glib::ustring data_type; virtual data_type from_string(const std::string& from) const; }; } // namespace serialize class Config { public: /** @brief Abstract base class for configuration file entries. */ class Entry { public: Entry(const Glib::ustring& name); virtual ~Entry() {} /** @brief Saves this entry into the given element. */ virtual void save(xmlpp::Element& elem) const = 0; /** @brief Returns the name of this entry. */ const Glib::ustring& get_name() const; protected: Glib::ustring m_name; }; /** @brief Entry that contains a value. */ class ValueEntry: public Entry { public: /** @brief Stores an object of the given type into this * entry. */ template ValueEntry( const Glib::ustring& name, const DataType& value, const serialize::context_base_to& ctx = serialize::default_context_to() ); /** @brief Returns the value of this entry and tries to * convert it to the requested type. */ template DataType get( const serialize::context_base_from& ctx = serialize::default_context_from() ) const; protected: serialize::data m_data; }; /** Value entry with type information. Useful for future storage * backends like gconf or windows registry. */ template class TypedValueEntry: public ValueEntry { public: /** @brief Creates a new typed value entry that is converted * to a string using the given context. */ TypedValueEntry( const Glib::ustring& name, const DataType& value, const serialize::context_base_to& ctx = serialize::default_context_to() ); /** @brief Reads a value entry from a xml element. */ TypedValueEntry(const xmlpp::Element& elem); /** @brief Stores this entry into the given element. */ virtual void save(xmlpp::Element& elem) const; }; /** @brief Entry containing child entries. */ class ParentEntry: public Entry { protected: typedef std::map map_type; public: template class iterator_base { public: typedef BaseIterator base_iterator; iterator_base(const base_iterator& iter); iterator_base& operator++(); iterator_base operator++(int); bool operator==(const iterator_base& other) const; bool operator!=(const iterator_base& other) const; Entry& operator*() const; Entry* operator->() const; protected: base_iterator m_iter; }; typedef iterator_base iterator; typedef iterator_base const_iterator; /** @brief Creates a new ParentEntry of the given name with * no children. */ ParentEntry(const Glib::ustring& name); /** @brief a new ParentEntry from the given xml element. */ ParentEntry(const xmlpp::Element& elem); virtual ~ParentEntry(); /** @brief Stores this ParentEntry into the given xml element. */ virtual void save(xmlpp::Element& elem) const; /** @brief Returns a child entry with the given name. * * Returns NULL if there is no such child. */ Entry* get_child(const Glib::ustring& name); /** @brief Returns a child entry with the given name. * * Returns NULL if there is no such child. */ const Entry* get_child(const Glib::ustring& name) const; /** @brief Returns a child that is another parent entry * and has the given name. * * Returns NULL if there is no such child. */ ParentEntry* get_parent_child(const Glib::ustring& name); /** @brief Returns a child that is another parent entry * and has the given name. * * Returns NULL if there is no such child. */ const ParentEntry* get_parent_child(const Glib::ustring& name) const; /** @brief Returns a child that is a value entry and has * the given name. * * Returns NULL if there is no such child. */ ValueEntry* get_value_child(const Glib::ustring& name); /** @brief Returns a child that is a value entry and has * the given name. * * Returns NULL if there is no such child. */ const ValueEntry* get_value_child(const Glib::ustring& name) const; /** @brief: Returns whether there is a child ValueEntry with * the given name. */ bool has_value(const Glib::ustring& name); /** @brief Returns the value from the child with the given * name. * * If there is no such child (or it is not a ValueEntry), the * given default value is returned. */ template DataType get_value( const Glib::ustring& name, const DataType& default_value = DataType(), const serialize::context_base_from& ctx = serialize::default_context_from() ) const; /** @brief Returns the value from the child with the given * name. * * If there is no such child (or it is not a ValueEntry), a * new child will be created (replacing a potential old one) * and assigned the given default value. */ template DataType supply_value( const Glib::ustring& name, const DataType& default_value = DataType(), const serialize::context_base_from& ctx_from = serialize::default_context_from(), const serialize::context_base_to& ctx_to = serialize::default_context_to() ); /** @brief Creates a new child ValueEntry with the given name * and value. * * If there is already a child with this name, it will be * removed. */ template void set_value( const Glib::ustring& name, const DataType& value, const serialize::context_base_to& ctx = serialize::default_context_to() ); /** @brief Returns the parent entry at name. * * If there is no parent node, a new one will be created * that overwrites the current entry (if any). */ ParentEntry& operator[](const Glib::ustring& name); /** @brief Creates a new ParentEntry with the given name. * * If there is already a child with this name, it will be * removed. */ ParentEntry& set_parent(const Glib::ustring& name); /** @brief Returns an iterator to the beginning of the * child entry sequence. */ iterator begin(); /** @brief Returns an iterator to the beginning of the * child entry sequence. */ const_iterator begin() const; /** @brief Returns an iterator to the end of the child * entry sequence. */ iterator end(); /** @brief Returns an iterator to the end of the child * entry sequence. */ const_iterator end() const; protected: map_type m_map; }; Config(const Glib::ustring& file); ~Config(); ParentEntry& get_root(); const ParentEntry& get_root() const; protected: Glib::ustring m_filename; std::auto_ptr m_root; }; template Config::ValueEntry:: ValueEntry(const Glib::ustring& name, const DataType& value, const serialize::context_base_to& ctx): Entry(name), m_data(value, ctx) { } template DataType Config::ValueEntry:: get(const serialize::context_base_from& from) const { return m_data.Gobby::serialize::data::as(from); } template Config::TypedValueEntry:: TypedValueEntry(const Glib::ustring& name, const DataType& value, const serialize::context_base_to& ctx): ValueEntry(name, value, ctx) { } template Config::TypedValueEntry::TypedValueEntry(const xmlpp::Element& elem): ValueEntry(elem.get_name(), elem.get_child_text()->get_content() ) { } template void Config::TypedValueEntry::save(xmlpp::Element& elem) const { elem.set_child_text(m_data.serialized() ); } template Config::ParentEntry::iterator_base:: iterator_base(const base_iterator& iter): m_iter(iter) { } template Config::ParentEntry::iterator_base& Config::ParentEntry::iterator_base::operator++() { ++ m_iter; return *this; } template Config::ParentEntry::iterator_base Config::ParentEntry::iterator_base::operator++(int) { iterator_base temp(*this); ++ m_iter; return temp; } template bool Config::ParentEntry::iterator_base:: operator==(const iterator_base& other) const { return m_iter == other.m_iter; } template bool Config::ParentEntry::iterator_base:: operator!=(const iterator_base& other) const { return m_iter != other.m_iter; } template Entry& Config::ParentEntry::iterator_base:: operator*() const { return *m_iter->second; } template Entry* Config::ParentEntry::iterator_base:: operator->() const { return m_iter->second; } template DataType Config::ParentEntry:: get_value(const Glib::ustring& name, const DataType& default_value, const serialize::context_base_from& ctx) const { const ValueEntry* entry = get_value_child(name); if(entry == NULL) return default_value; return entry->ValueEntry::get(ctx); } template DataType Config::ParentEntry:: supply_value(const Glib::ustring& name, const DataType& default_value, const serialize::context_base_from& ctx_from, const serialize::context_base_to& ctx_to) { ValueEntry* entry = get_value_child(name); if(entry != NULL) return entry->get(ctx_from); set_value(name, default_value, ctx_to); return default_value; } template void Config::ParentEntry:: set_value(const Glib::ustring& name, const DataType& value, const serialize::context_base_to& ctx) { Entry* entry = get_child(name); if(entry != NULL) delete entry; m_map[name] = new TypedValueEntry(name, value, ctx); } } // namespace Gobby #endif // _GOBBY_CONFIG_HPP_ gobby-0.5.0/code/util/config.cpp0000644000175000017500000001633212370427450013410 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/config.hpp" #include "util/file.hpp" #include "util/i18n.hpp" #include #include #include #include #include #include namespace { template typename Map::mapped_type ptrmap_find(const Map& map, const typename Map::key_type& key) { typename Map::const_iterator iter = map.find(key); if(iter == map.end() ) return NULL; return iter->second; } } Gobby::Config::Entry::Entry(const Glib::ustring& name): m_name(name) { } const Glib::ustring& Gobby::Config::Entry::get_name() const { return m_name; } Gobby::Config::ParentEntry::ParentEntry(const Glib::ustring& name): Entry(name) { } Gobby::Config::ParentEntry::ParentEntry(const xmlpp::Element& elem): Entry(elem.get_name() ) { xmlpp::Node::NodeList list = elem.get_children(); for(xmlpp::Node::NodeList::iterator iter = list.begin(); iter != list.end(); ++ iter) { xmlpp::Element* child = dynamic_cast(*iter); if(child == NULL) continue; if(child->get_child_text() && !child->get_child_text()->is_white_space()) { ValueEntry* entry = new TypedValueEntry( *child ); m_map[child->get_name()] = entry; } else { m_map[child->get_name()] = new ParentEntry(*child); } } } Gobby::Config::ParentEntry::~ParentEntry() { for(map_type::iterator iter = m_map.begin(); iter != m_map.end(); ++ iter) { delete iter->second; } } void Gobby::Config::ParentEntry::save(xmlpp::Element& elem) const { for(map_type::const_iterator iter = m_map.begin(); iter != m_map.end(); ++ iter) { Entry* entry = iter->second; xmlpp::Element* child = elem.add_child(entry->get_name() ); entry->save(*child); } } Gobby::Config::Entry* Gobby::Config::ParentEntry:: get_child(const Glib::ustring& name) { return ptrmap_find(m_map, name); } const Gobby::Config::Entry* Gobby::Config::ParentEntry:: get_child(const Glib::ustring& name) const { return ptrmap_find(m_map, name); } Gobby::Config::ParentEntry* Gobby::Config::ParentEntry:: get_parent_child(const Glib::ustring& name) { return dynamic_cast(get_child(name) ); } const Gobby::Config::ParentEntry* Gobby::Config::ParentEntry:: get_parent_child(const Glib::ustring& name) const { return dynamic_cast(get_child(name) ); } Gobby::Config::ValueEntry* Gobby::Config::ParentEntry:: get_value_child(const Glib::ustring& name) { return dynamic_cast(get_child(name) ); } const Gobby::Config::ValueEntry* Gobby::Config::ParentEntry:: get_value_child(const Glib::ustring& name) const { return dynamic_cast(get_child(name) ); } bool Gobby::Config::ParentEntry::has_value(const Glib::ustring& name) { return get_value_child(name) != NULL; } Gobby::Config::ParentEntry& Gobby::Config::ParentEntry:: operator[](const Glib::ustring& name) { ParentEntry* entry = get_parent_child(name); if(entry != NULL) return *entry; return set_parent(name); } Gobby::Config::ParentEntry& Gobby::Config::ParentEntry:: set_parent(const Glib::ustring& name) { Entry* entry = get_child(name); if(entry != NULL) delete entry; ParentEntry* child = new ParentEntry(name); m_map[name] = child; return *child; } Gobby::Config::ParentEntry::iterator Gobby::Config::ParentEntry::begin() { return iterator(m_map.begin() ); } Gobby::Config::ParentEntry::const_iterator Gobby::Config::ParentEntry:: begin() const { return const_iterator(m_map.begin() ); } Gobby::Config::ParentEntry::iterator Gobby::Config::ParentEntry::end() { return iterator(m_map.end() ); } Gobby::Config::ParentEntry::const_iterator Gobby::Config::ParentEntry:: end() const { return const_iterator(m_map.end() ); } Gobby::Config::Config(const Glib::ustring& file): m_filename(file) { xmlpp::DomParser parser; if(!Glib::file_test(file, Glib::FILE_TEST_IS_REGULAR)) { m_root.reset(new ParentEntry("gobby-config") ); return; } try { parser.parse_file(file); } catch(xmlpp::exception& e) { // Empty config m_root.reset(new ParentEntry("gobby-config") ); return; } xmlpp::Document* document = parser.get_document(); if(document == NULL) { m_root.reset(new ParentEntry("gobby-config") ); return; } xmlpp::Element* root = document->get_root_node(); // Config is present, but contains no root node if(root == NULL) { m_root.reset(new ParentEntry("gobby-config") ); return; } m_root.reset(new ParentEntry(*root) ); } Gobby::Config::~Config() { xmlpp::Document document; xmlpp::Element* root = document.create_root_node("gobby-config"); m_root->save(*root); try { Glib::ustring dirname = Glib::path_get_dirname(m_filename); create_directory_with_parents(dirname, 0700); document.write_to_file_formatted(m_filename, "UTF-8"); } catch(Glib::Exception& e) { g_warning("Could not write config file: %s", e.what().c_str() ); } catch(std::exception& e) { g_warning("Could not write config file: %s", e.what() ); } } Gobby::Config::ParentEntry& Gobby::Config::get_root() { return *m_root; } const Gobby::Config::ParentEntry& Gobby::Config::get_root() const { return *m_root; } std::string Gobby::serialize::default_context_to:: to_string(const data_type& from) const { unsigned int red = from.get_red() * 255 / 65535; unsigned int green = from.get_green() * 255 / 65535; unsigned int blue = from.get_blue() * 255 / 65535; std::stringstream stream; stream << std::hex << ( (red << 16) | (green << 8) | blue); return stream.str(); } Gobby::serialize::default_context_from::data_type Gobby::serialize::default_context_from:: from_string(const std::string& from) const { unsigned int rgb_color; std::stringstream stream(from); stream >> std::hex >> rgb_color; if(stream.bad() ) { throw conversion_error( from + " should be hexadecimal color triple" ); } Gdk::Color color; color.set_red( ((rgb_color >> 16) & 0xff) * 65535 / 255); color.set_green( ((rgb_color >> 8) & 0xff) * 65535 / 255); color.set_blue( ((rgb_color) & 0xff) * 65535 / 255); return color; } std::string Gobby::serialize::default_context_to:: to_string(const data_type& from) const { return from; } Gobby::serialize::default_context_from::data_type Gobby::serialize::default_context_from:: from_string(const std::string& from) const { return from; } gobby-0.5.0/code/util/asyncoperation.hpp0000644000175000017500000000306312370427450015203 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_ASYNC_OPERATION_HPP_ #define _GOBBY_ASYNC_OPERATION_HPP_ #include #include namespace Gobby { class AsyncOperation { public: class Handle { friend class AsyncOperation; public: Handle(AsyncOperation& operation); ~Handle(); void cancel(); private: AsyncOperation* m_operation; }; AsyncOperation(); virtual ~AsyncOperation(); static std::auto_ptr start(std::auto_ptr operation); protected: virtual void run() = 0; virtual void finish() = 0; const Handle* get_handle() const { return m_handle; } private: void thread_run(); bool done(); Glib::Thread* m_thread; Handle* m_handle; bool m_finished; }; } #endif // _GOBBY_ASYNC_OPERATION_HPP_ gobby-0.5.0/code/util/uri.hpp0000644000175000017500000000241712370427450012746 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_URI_HPP_ #define _GOBBY_URI_HPP_ #include namespace Gobby { void parse_uri(const std::string& uri, std::string& scheme, std::string& netloc, std::string& path); void parse_netloc(const std::string& netloc, std::string& hostname, std::string& service, unsigned int& device_index); } #endif // _GOBBY_URI_HPP_ gobby-0.5.0/code/util/uri.cpp0000644000175000017500000000566612375006434012752 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/uri.hpp" #include "util/i18n.hpp" #include #include #ifndef G_OS_WIN32 # include # include #endif namespace Gobby { void parse_uri(const std::string& uri, std::string& scheme, std::string& netloc, std::string& path) { // First, parse the scheme. If there is no scheme found, default // to infinote: std::string::size_type scheme_delim = uri.find("://"); if(scheme_delim == std::string::npos) { scheme = "infinote"; scheme_delim = 0; } else { scheme = uri.substr(0, scheme_delim); // Skip ':' and all following '/' do { ++scheme_delim; } while(uri[scheme_delim] == '/'); } std::string::size_type path_delim = uri.find('/', scheme_delim); if(path_delim == std::string::npos) { netloc = uri.substr(scheme_delim); path.clear(); } else { netloc = Glib::uri_unescape_string( uri.substr(scheme_delim, path_delim - scheme_delim)); path = Glib::uri_unescape_string(uri.substr(path_delim)); } } void parse_netloc(const std::string& netloc, std::string& hostname, std::string& service, unsigned int& device_index) { std::string str = netloc; service = "6523"; // Default device_index = 0; // Default // Strip away device name std::string::size_type pos; if( (pos = str.rfind('%')) != std::string::npos) { std::string device_name = str.substr(pos + 1); str.erase(pos); #ifdef G_OS_WIN32 // TODO: Implement device_index = 0; #else device_index = if_nametoindex(device_name.c_str()); if(device_index == 0) { throw std::runtime_error( _("Device \"%1\" does not exist")); } #endif } if(str[0] == '[' && ((pos = str.find(']', 1)) != std::string::npos)) { // Hostname surrounded by '[...]' hostname = str.substr(1, pos-1); ++ pos; if(pos < str.length() && str[pos] == ':') service = str.substr(pos + 1); } else { pos = str.find(':'); if(pos != std::string::npos) { hostname = str.substr(0, pos); service = str.substr(pos + 1); } else { hostname = str; } } } } // namespace Gobby gobby-0.5.0/code/util/gtk-compat.hpp0000644000175000017500000001344512370427450014220 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_GTK_COMPAT_HPP_ #define _GOBBY_GTK_COMPAT_HPP_ #include #if GTKMM_MAJOR_VERSION == 3 || \ (GTKMM_MAJOR_VERSION == 2 && GTKMM_MINOR_VERSION >= 90) # define USE_GTKMM3 #endif #include #include #include #ifndef USE_GTKMM3 #include #include #endif #include #if !GTK_CHECK_VERSION(2,22,0) #define GDK_KEY_Up GDK_Up #define GDK_KEY_Down GDK_Down #define GDK_KEY_Page_Up GDK_Page_Up #define GDK_KEY_Page_Down GDK_Page_Down #define GDK_KEY_0 GDK_0 #define GDK_KEY_1 GDK_1 #define GDK_KEY_2 GDK_2 #define GDK_KEY_3 GDK_3 #define GDK_KEY_4 GDK_4 #define GDK_KEY_5 GDK_5 #define GDK_KEY_6 GDK_6 #define GDK_KEY_7 GDK_7 #define GDK_KEY_8 GDK_8 #define GDK_KEY_9 GDK_9 #define GDK_KEY_m GDK_m #define GDK_KEY_z GDK_z #define GDK_KEY_Z GDK_Z #endif namespace Gobby { namespace GtkCompat { #ifdef USE_GTKMM3 class ComboBoxEntry: public Gtk::ComboBox { public: ComboBoxEntry(): Gtk::ComboBox(true) {} void set_text_column(const Gtk::TreeModelColumnBase& column) { set_entry_text_column(column); } }; #else typedef Gtk::ComboBoxEntry ComboBoxEntry; #endif #ifdef USE_GTKMM3 static const Gtk::Align ALIGN_LEFT = Gtk::ALIGN_START; static const Gtk::Align ALIGN_RIGHT = Gtk::ALIGN_END; static const Gtk::Align ALIGN_TOP = Gtk::ALIGN_START; #else static const Gtk::AlignmentEnum ALIGN_LEFT = Gtk::ALIGN_LEFT; static const Gtk::AlignmentEnum ALIGN_RIGHT = Gtk::ALIGN_RIGHT; static const Gtk::AlignmentEnum ALIGN_TOP = Gtk::ALIGN_TOP; #endif inline bool is_realized(const Gtk::Widget& widget) { #ifdef USE_GTKMM3 return widget.get_realized(); #else return (widget.get_flags() & Gtk::REALIZED) != 0; #endif } inline bool is_visible(const Gtk::Widget& widget) { #ifdef USE_GTKMM3 return widget.get_visible(); #else return widget.is_visible(); #endif } #ifndef USE_GTKMM3 class Notebook: public Gtk::Notebook { protected: virtual void on_switch_page(GtkNotebookPage* page, guint page_num) { Gtk::Notebook::on_switch_page(page, page_num); on_switch_page(get_nth_page(page_num), page_num); } virtual void on_switch_page(Gtk::Widget* page, guint page_num) {} }; #else typedef Gtk::Notebook Notebook; #endif inline Glib::RefPtr render_icon(Gtk::Widget& widget, const Gtk::StockID& stock_id, Gtk::IconSize size) { #ifdef USE_GTKMM3 Glib::RefPtr pixbuf = widget.render_icon_pixbuf(stock_id, size); if(!pixbuf) // icon not found pixbuf = widget.render_icon_pixbuf(Gtk::Stock::MISSING_IMAGE, size); g_assert(pixbuf); return pixbuf; #else return widget.render_icon(stock_id, size); #endif } #ifdef USE_GTKMM3 typedef GtkTextSearchFlags TextSearchFlags; static const TextSearchFlags TEXT_SEARCH_CASE_INSENSITIVE = GTK_TEXT_SEARCH_CASE_INSENSITIVE; #else typedef GtkSourceSearchFlags TextSearchFlags; static const TextSearchFlags TEXT_SEARCH_CASE_INSENSITIVE = GTK_SOURCE_SEARCH_CASE_INSENSITIVE; #endif inline gboolean text_iter_forward_search(const GtkTextIter* iter, const gchar* str, TextSearchFlags flags, GtkTextIter* match_start, GtkTextIter* match_end, const GtkTextIter* limit) { #ifdef USE_GTKMM3 return gtk_text_iter_forward_search(iter, str, flags, match_start, match_end, limit); #else return gtk_source_iter_forward_search(iter, str, flags, match_start, match_end, limit); #endif } inline gboolean text_iter_backward_search(const GtkTextIter* iter, const gchar* str, TextSearchFlags flags, GtkTextIter* match_start, GtkTextIter* match_end, const GtkTextIter* limit) { #ifdef USE_GTKMM3 return gtk_text_iter_backward_search(iter, str, flags, match_start, match_end, limit); #else return gtk_source_iter_backward_search(iter, str, flags, match_start, match_end, limit); #endif } #ifdef USE_GTKMM3 typedef Glib::RefPtr IconSet; inline IconSet create_icon_set() { return Gtk::IconSet::create(); } #else class IconSet: public Gtk::IconSet { public: IconSet* operator->() { return this; } const IconSet* operator->() const { return this; } }; inline IconSet create_icon_set() { return IconSet(); } #endif #ifdef USE_GTKMM3 inline Gdk::Color color_from_rgba(const Gdk::RGBA& rgba) { Gdk::Color c; c.set_red(rgba.get_red_u()); c.set_green(rgba.get_green_u()); c.set_blue(rgba.get_blue_u()); return c; } #endif } // namespace GtkCompat } // namespace Gobby #endif // _GOBBY_GTK_COMPAT_HPP_ gobby-0.5.0/code/util/closebutton.hpp0000644000175000017500000000237012370427450014506 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CLOSEBUTTON_HPP_ #define _GOBBY_CLOSEBUTTON_HPP_ #include "util/gtk-compat.hpp" #include namespace Gobby { class CloseButton: public Gtk::Button { public: CloseButton(); protected: #ifdef USE_GTKMM3 virtual void on_style_updated(); #else virtual void on_style_changed( const Glib::RefPtr& previous_style); #endif }; } // namespace Gobby #endif // _GOBBY_CLOSEBUTTON_HPP_ gobby-0.5.0/code/util/i18n.hpp0000644000175000017500000000236212370427450012725 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_I18N_HPP_ #define _GOBBY_I18N_HPP_ #ifndef N_ # define N_(id) (id) #endif namespace Gobby { /** Translates a message from the gobby catalog. */ const char* _(const char* msgid); /** Translate pluralized message from the gobby catalog. */ const char* ngettext(const char* msgid, const char* msgid_plural, unsigned long int n); } #endif // _GOBBY_I18N_HPP_ gobby-0.5.0/code/util/Makefile.in0000644000175000017500000004151412376162112013501 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = code/util DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ libgobby_util_a_AR = $(AR) $(ARFLAGS) libgobby_util_a_LIBADD = am_libgobby_util_a_OBJECTS = asyncoperation.$(OBJEXT) \ closebutton.$(OBJEXT) color.$(OBJEXT) config.$(OBJEXT) \ file.$(OBJEXT) groupframe.$(OBJEXT) historyentry.$(OBJEXT) \ i18n.$(OBJEXT) serialize.$(OBJEXT) uri.$(OBJEXT) libgobby_util_a_OBJECTS = $(am_libgobby_util_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/code depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgobby_util_a_SOURCES) DIST_SOURCES = $(libgobby_util_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ noinst_LIBRARIES = libgobby-util.a libgobby_util_a_SOURCES = \ asyncoperation.cpp \ closebutton.cpp \ color.cpp \ config.cpp \ file.cpp \ groupframe.cpp \ historyentry.cpp \ i18n.cpp \ serialize.cpp \ uri.cpp noinst_HEADERS = \ asyncoperation.hpp \ closebutton.hpp \ color.hpp \ config.hpp \ defaultaccumulator.hpp \ file.hpp \ groupframe.hpp \ gtk-compat.hpp \ historyentry.hpp \ i18n.hpp \ serialize.hpp \ uri.hpp AM_CPPFLAGS = $(gobby_CFLAGS) $(unique_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(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) --foreign code/util/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign code/util/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(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) libgobby-util.a: $(libgobby_util_a_OBJECTS) $(libgobby_util_a_DEPENDENCIES) $(EXTRA_libgobby_util_a_DEPENDENCIES) $(AM_V_at)-rm -f libgobby-util.a $(AM_V_AR)$(libgobby_util_a_AR) libgobby-util.a $(libgobby_util_a_OBJECTS) $(libgobby_util_a_LIBADD) $(AM_V_at)$(RANLIB) libgobby-util.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asyncoperation.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closebutton.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/config.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/groupframe.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/historyentry.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/i18n.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/serialize.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uri.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` 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) $(HEADERS) 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-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 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-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic 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: gobby-0.5.0/code/util/color.cpp0000644000175000017500000000661712370427450013266 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/color.hpp" namespace { void hsv_to_rgb(double* h, double* s, double* v) { double hue, saturation, value; double f, p, q, t; if (*s == 0.0) { *h = *v; *s = *v; *v = *v; /* heh */ } else { hue = *h * 6.0; saturation = *s; value = *v; if (hue == 6.0) hue = 0.0; f = hue - (int) hue; p = value * (1.0 - saturation); q = value * (1.0 - saturation * f); t = value * (1.0 - saturation * (1.0 - f)); switch ((int) hue) { case 0: *h = value; *s = t; *v = p; break; case 1: *h = q; *s = value; *v = p; break; case 2: *h = p; *s = value; *v = t; break; case 3: *h = p; *s = q; *v = value; break; case 4: *h = t; *s = p; *v = value; break; case 5: *h = value; *s = p; *v = q; break; default: g_assert_not_reached (); break; } } } void rgb_to_hsv(double* r, double* g, double* b) { double red, green, blue; double h, s, v; double min, max; double delta; red = *r; green = *g; blue = *b; h = 0.0; if (red > green) { if (red > blue) max = red; else max = blue; if (green < blue) min = green; else min = blue; } else { if (green > blue) max = green; else max = blue; if (red < blue) min = red; else min = blue; } v = max; if (max != 0.0) s = (max - min) / max; else s = 0.0; if (s == 0.0) h = 0.0; else { delta = max - min; if (red == max) h = (green - blue) / delta; else if (green == max) h = 2 + (blue - red) / delta; else if (blue == max) h = 4 + (red - green) / delta; h /= 6.0; if (h < 0.0) h += 1.0; else if (h > 1.0) h -= 1.0; } *r = h; *g = s; *b = v; } } namespace Gobby { void hsv_to_rgb(double& rh, double &gs, double &gv) { ::hsv_to_rgb(&rh, &gs, &gv); } void rgb_to_hsv(double &rh, double &gs, double &gv) { ::rgb_to_hsv(&rh, &gs, &gv); } double hue_from_gdk_color(const Gdk::Color& color) { double r = color.get_red() / 65535.0; double g = color.get_green() / 65535.0; double b = color.get_blue() / 65535.0; ::rgb_to_hsv(&r, &g, &b); return r; } Gdk::Color hue_to_gdk_color(double hue, double saturation, double value) { ::hsv_to_rgb(&hue, &saturation, &value); Gdk::Color color; color.set_red(static_cast(hue * 65535.0)); color.set_green(static_cast(saturation * 65535.0)); color.set_blue(static_cast(value * 65535.0)); return color; } } gobby-0.5.0/code/util/groupframe.cpp0000644000175000017500000000270512370427450014311 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/groupframe.hpp" #include #include Gobby::GroupFrame::GroupFrame(const Glib::ustring& title): m_box(false, 6) { Gtk::Label* title_label = Gtk::manage(new Gtk::Label); title_label->set_markup( "" + Glib::Markup::escape_text(title) + ""); set_label_widget(*title_label); title_label->show(); m_box.show(); m_alignment.set_padding(6, 0, 12, 0); m_alignment.add(m_box); m_alignment.show(); set_shadow_type(Gtk::SHADOW_NONE); Gtk::Frame::add(m_alignment); } void Gobby::GroupFrame::add(Gtk::Widget& widget) { m_box.pack_start(widget, Gtk::PACK_EXPAND_WIDGET); } gobby-0.5.0/code/util/defaultaccumulator.hpp0000644000175000017500000000266212370427450016035 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_DEFAULT_ACCUMULATOR_HPP_ #define _GOBBY_DEFAULT_ACCUMULATOR_HPP_ namespace Gobby { /** Accumulator for signals with return type that defaults to a value if no * signal handler is connected. */ template class default_accumulator { public: typedef return_type result_type; template result_type operator()(iterator begin, iterator end) const { return_type result = default_return; for(; begin != end; ++ begin) result = *begin; return result; } }; } // namespace Gobby #endif // _GOBBY_DEFAULT_ACCUMULATOR_HPP_ gobby-0.5.0/code/util/file.cpp0000644000175000017500000000527312370427450013064 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/file.hpp" #include "util/i18n.hpp" #include #include #include #include // For mkdir / CreateDirectory #ifdef WIN32 #include #else #include #include #include #endif namespace { void create_directory(const char* path, int mode) { #ifdef WIN32 // TODO: Use widechar API? if(CreateDirectoryA(path, NULL) == FALSE) { LPVOID msgbuf; DWORD err = GetLastError(); // TODO: Use widechar API? FormatMessageA( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), reinterpret_cast(&msgbuf), 0, NULL ); std::string error_message = static_cast(msgbuf); LocalFree(msgbuf); // TODO: Convert to UTF-8? throw std::runtime_error( Glib::ustring::compose( Gobby::_("Could not create directory " "\"%1\": %2"), std::string(path), error_message)); } #else if(g_mkdir(path, mode) == -1) { throw std::runtime_error( Glib::ustring::compose( Gobby::_("Could not create directory " "\"%1\": %2"), std::string(path), std::strerror(errno))); } #endif } } namespace Gobby { void create_directory_with_parents(const std::string& path, int mode) { // Directory exists, nothing to do if(Glib::file_test(path, Glib::FILE_TEST_IS_DIR) ) return; // Find path to the directory to create std::string path_to = Glib::path_get_dirname(path); // Create this path, if it doesn't exists create_directory_with_parents(path_to, mode); // Create new directory create_directory(path.c_str(), mode); } std::string config_filename(const std::string& filename) { return Glib::build_filename( Glib::build_filename( Glib::get_user_config_dir(), "gobby"), filename); } } gobby-0.5.0/code/util/i18n.cpp0000644000175000017500000000230312370427450012713 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "features.hpp" #include "util/i18n.hpp" #include const char* Gobby::_(const char* msgid) { return dgettext(GETTEXT_PACKAGE, msgid); } const char* Gobby::ngettext(const char* msgid, const char* msgid_plural, unsigned long int n) { return dngettext(GETTEXT_PACKAGE, msgid, msgid_plural, n); } gobby-0.5.0/code/util/file.hpp0000644000175000017500000000211112370427450013055 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_DIR_HPP_ #define _GOBBY_DIR_HPP_ #include namespace Gobby { void create_directory_with_parents(const std::string& path, int mode=0755); std::string config_filename(const std::string& filename); } #endif // _GOBBY_DIR_HPP_ gobby-0.5.0/code/util/serialize.hpp0000644000175000017500000001635612370427450014145 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_SERIALIZE_HPP_ #define _GOBBY_SERIALIZE_HPP_ #include #include #include namespace Gobby { /** Generic stuff to de/serialize data types to/from strings. */ namespace serialize { /** Error that is thrown if conversion from a string fails. For example, if * "t3" should be converted to int. */ class conversion_error: public std::runtime_error { public: conversion_error(const std::string& message); }; /** @brief Several built-in type names. */ template struct type_name {}; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; template<> struct type_name { static const char* name; }; /** Abstract base context type to convert something to a string. */ template class context_base_to { public: virtual ~context_base_to() {} /** @brief Converts the given data type to a string. */ virtual std::string to_string(const data_type& from) const = 0; }; /** Abstract base context type to convert a string to another type. */ template class context_base_from { public: virtual ~context_base_from() {} /** @brief Converts a string to a data type. Might throw * serialize::conversion_error. */ virtual data_type from_string(const std::string& from) const = 0; }; /** Default context to convert something literally to a string. */ template class default_context_to: public context_base_to { public: /** @brief Converts the given data type to a string. */ virtual std::string to_string(const data_type& from) const; protected: /** Method derived classes may overload to alter the conversion. */ virtual void on_stream_setup(std::stringstream& stream) const; }; /** Default context to convert a string literally to a type. */ template class default_context_from: public context_base_from { public: /** @brief Converts the given string to the type specified * as template parameter. * * May throw serialize::conversion_error(). */ virtual data_type from_string(const std::string& from) const; protected: /** Method derived classes may overload to alter the conversion. */ virtual void on_stream_setup(std::stringstream& stream) const; }; #if 0 /** Context that uses hexadecimal representation for numerical types. */ template class hex_context_to: public default_context_to { protected: virtual void on_stream_setup(std::stringstream& stream) const; }; /** Context that uses hexadecimal representation for numerical types. */ template class hex_context_from: public default_context_from { public: virtual void on_stream_setup(std::stringstream& stream) const; }; #endif template<> class default_context_to: public context_base_to { public: typedef std::string data_type; virtual std::string to_string(const data_type& from) const; }; template<> class default_context_from: public context_base_from { public: typedef std::string data_type; virtual data_type from_string(const std::string& from) const; }; template<> class default_context_to: public context_base_to { public: typedef const char* data_type; virtual std::string to_string(const data_type& from) const; }; template class default_context_to: public context_base_to { public: typedef char data_type[N]; virtual std::string to_string(const data_type& from) const; }; /** A serialized object. */ class data { public: /** Uses the given string as serialized data without converting it. */ data(const std::string& serialized); /** Serialises the given object with the given context. A default * context is used if no one is given. */ template data(const type& data, const context_base_to& ctx = default_context_to()); /** Returns the serialized data. */ const std::string& serialized() const; /** Deserializes the object with the given context. A default context * is used of no one is given. */ template type as(const context_base_from& ctx = default_context_from()) const; protected: std::string m_serialized; }; template std::string default_context_to:: to_string(const data_type& from) const { std::stringstream stream; on_stream_setup(stream); stream << from; return stream.str(); } template data_type default_context_from:: from_string(const std::string& from) const { std::stringstream stream(from); on_stream_setup(stream); data_type data; stream >> data; if(stream.bad() ) { throw conversion_error( "Could not convert \"" + from + "\" to " + type_name::name ); } return data; } template void default_context_to:: on_stream_setup(std::stringstream& stream) const { } template void default_context_from:: on_stream_setup(std::stringstream& stream) const { } #if 0 template void hex_context_to:: on_stream_setup(std::stringstream& stream) const { stream << std::hex; } template void hex_context_from:: on_stream_setup(std::stringstream& stream) const { stream >> std::hex; } #endif template data::data(const data_type& data, const context_base_to& ctx): m_serialized(ctx.to_string(data) ) { } template data_type data::as(const context_base_from& ctx) const { return ctx.from_string(m_serialized); } template std::string default_context_to:: to_string(const data_type& from) const { return from; } } // namespace serialize } // namespace Gobby #endif // _GOBBY_SERIALIZE_HPP_ gobby-0.5.0/code/util/historyentry.cpp0000644000175000017500000002142412370427450014724 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/historyentry.hpp" #include #include namespace { Glib::ustring strip(const Glib::ustring& string) { gchar* dup = g_strdup(string.c_str()); dup = g_strchug(dup); Glib::ustring retval(dup); g_free(dup); return retval; } bool strequal(const Glib::ustring& string1, const Glib::ustring& string2) { gchar* casefold1 = g_utf8_casefold(string1.c_str(), -1); gchar* casefold2 = g_utf8_casefold(string2.c_str(), -1); int collate = g_utf8_collate(casefold1, casefold2); g_free(casefold1); g_free(casefold2); return collate == 0; } } // Load history asynchronously, to save startup time class Gobby::History::Loader { public: Loader(History& history); private: void close(); void add(const std::string& str); void process(unsigned int size); void on_read(const Glib::RefPtr& result); void on_stream_read(const Glib::RefPtr& result); History& m_history; Glib::RefPtr m_file; Glib::RefPtr m_stream; std::string m_line; static const unsigned int BUFFER_SIZE = 1024; char m_buffer[BUFFER_SIZE]; }; Gobby::History::Loader::Loader(History& history): m_history(history) { m_file = Gio::File::create_for_path(m_history.m_history_file); m_file->read_async(sigc::mem_fun(*this, &Loader::on_read)); } void Gobby::History::Loader::close() { m_history.m_loader.reset(NULL); } void Gobby::History::Loader::add(const std::string& str) { if(!str.empty()) { Gtk::TreeIter iter = m_history.m_history->append(); (*iter)[m_history.m_history_columns.text] = str; } } void Gobby::History::Loader::process(unsigned int size) { const char* pos = m_buffer; const char* end = m_buffer + size; const char* next; const Gtk::TreeNodeChildren& children = m_history.m_history->children(); while((next = std::find(pos, end, '\n')) != end) { if(!m_line.empty()) { add(m_line + std::string(pos, next - pos)); m_line.clear(); } else { add(std::string(pos, next - pos)); } if(children.size() == m_history.m_length) break; pos = next + 1; } if(children.size() == m_history.m_length) { close(); } else { m_line.append(pos, end - pos); m_stream->read_async( m_buffer, BUFFER_SIZE, sigc::mem_fun(*this, &Loader::on_stream_read)); } } void Gobby::History::Loader::on_read( const Glib::RefPtr& result) { try { m_stream = m_file->read_finish(result); m_stream->read_async( m_buffer, BUFFER_SIZE, sigc::mem_fun(*this, &Loader::on_stream_read)); } catch(const Glib::Exception& ex) { close(); } } void Gobby::History::Loader::on_stream_read( const Glib::RefPtr& result) { gssize size; try { size = m_stream->read_finish(result); // This should have caused an exception g_assert(size >= 0); if(size == 0) { // EOF if(!m_line.empty()) add(m_line); close(); } else { process(size); } } catch(const Glib::Exception& ex) { close(); } } Gobby::History::History(const std::string& history_file, unsigned int length): m_length(length), m_history(Gtk::ListStore::create(m_history_columns)), m_current(m_history->children().end()), m_history_file(history_file), m_loader(new Loader(*this)) { } Gobby::History::History(unsigned int length): m_length(length), m_history(Gtk::ListStore::create(m_history_columns)), m_current(m_history->children().end()) { } Gobby::History::~History() { try { if(!m_history_file.empty()) { Glib::RefPtr file = Gio::File::create_for_path(m_history_file); Glib::RefPtr stream = file->replace(); const Gtk::TreeNodeChildren& children = m_history->children(); for(Gtk::TreeIter iter = children.begin(); iter != children.end(); ++ iter) { const Glib::ustring& str = (*iter)[m_history_columns.text]; gsize bytes_written; stream->write_all(str, bytes_written); g_assert(bytes_written == str.length()); stream->write_all("\n", bytes_written); g_assert(bytes_written == 1); } } } catch(const Glib::Exception& error) { // Ignore } } Glib::RefPtr Gobby::History::get_store() { return m_history; } const Gobby::History::Columns& Gobby::History::get_columns() const { return m_history_columns; } bool Gobby::History::up(const Glib::ustring& current, Glib::ustring& entry) { if(m_current == m_history->children().end()) { m_current = m_history->children().begin(); // No entries in list: if(m_current == m_history->children().end()) return false; if(!current.empty()) commit_noscroll(current); } else { ++ m_current; if(m_current == m_history->children().end()) { -- m_current; return false; } } entry = (*m_current)[m_history_columns.text]; return true; } bool Gobby::History::down(const Glib::ustring& current, Glib::ustring& entry) { if(m_current == m_history->children().end()) { if(!current.empty()) { entry.clear(); commit_noscroll(current); return true; } else { return false; } } if(m_current == m_history->children().begin()) { m_current = m_history->children().end(); entry.clear(); return true; } -- m_current; entry = (*m_current)[m_history_columns.text]; return true; } void Gobby::History::commit(const Glib::ustring& str) { commit_noscroll(str); m_current = m_history->children().end(); } void Gobby::History::commit_noscroll(const Glib::ustring& str) { const Glib::ustring stripped = strip(str); // Check if the entry already exists in the list, and if yes, // remove it. for(Gtk::TreeIter iter = m_history->children().begin(); iter != m_history->children().end(); ++iter) { const Glib::ustring& entry = (*iter)[m_history_columns.text]; if(strequal(entry, stripped)) { m_history->erase(iter); break; } } Gtk::TreeIter iter = m_history->prepend(); (*iter)[m_history_columns.text] = stripped; while(m_history->children().size() > m_length) { iter = m_history->children().end(); -- iter; m_history->erase(iter); } } Gobby::HistoryEntry::HistoryEntry(const std::string& history_file, unsigned int length): m_history(history_file, length) { } Gobby::HistoryEntry::HistoryEntry(unsigned int length): m_history(length) { } void Gobby::HistoryEntry::commit() { m_history.commit(get_text()); } bool Gobby::HistoryEntry::on_key_press_event(GdkEventKey* event) { Glib::ustring entry; if(event->keyval == GDK_KEY_Up) { if(m_history.up(get_text(), entry)) set_text(entry); return true; } if(event->keyval == GDK_KEY_Down) { if(m_history.down(get_text(), entry)) set_text(entry); return true; } return Gtk::Entry::on_key_press_event(event); } Gobby::HistoryComboBoxEntry::HistoryComboBoxEntry( const std::string& history_file, unsigned int length): m_history(history_file, length) { set_model(m_history.get_store()); set_text_column(m_history.get_columns().text); get_entry()->signal_key_press_event().connect( sigc::mem_fun( *this, &HistoryComboBoxEntry::on_entry_key_press_event), false); } Gobby::HistoryComboBoxEntry::HistoryComboBoxEntry(unsigned int length): m_history(length) { set_model(m_history.get_store()); set_text_column(m_history.get_columns().text); get_entry()->signal_key_press_event().connect( sigc::mem_fun( *this, &HistoryComboBoxEntry::on_entry_key_press_event), false); } void Gobby::HistoryComboBoxEntry::HistoryComboBoxEntry::commit() { m_history.commit(get_entry()->get_text()); } Glib::RefPtr Gobby::HistoryComboBoxEntry::HistoryComboBoxEntry::get_accessible() { return get_entry()->get_accessible(); } bool Gobby::HistoryComboBoxEntry::on_entry_key_press_event(GdkEventKey* event) { Glib::ustring entry; if(event->keyval == GDK_KEY_Up) { if(m_history.up(get_entry()->get_text(), entry)) get_entry()->set_text(entry); return true; } if(event->keyval == GDK_KEY_Down) { if(m_history.down(get_entry()->get_text(), entry)) get_entry()->set_text(entry); return true; } return false; } gobby-0.5.0/code/util/groupframe.hpp0000644000175000017500000000231612370427450014314 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_GROUPFRAME_HPP_ #define _GOBBY_GROUPFRAME_HPP_ #include #include #include namespace Gobby { class GroupFrame: public Gtk::Frame { public: GroupFrame(const Glib::ustring& title); void add(Gtk::Widget& widget); protected: Gtk::Alignment m_alignment; Gtk::VBox m_box; }; } #endif // _GOBBY_GROUPFRAME_HPP_ gobby-0.5.0/code/util/Makefile.am0000644000175000017500000000112112374720617013466 00000000000000noinst_LIBRARIES = libgobby-util.a libgobby_util_a_SOURCES = \ asyncoperation.cpp \ closebutton.cpp \ color.cpp \ config.cpp \ file.cpp \ groupframe.cpp \ historyentry.cpp \ i18n.cpp \ serialize.cpp \ uri.cpp noinst_HEADERS = \ asyncoperation.hpp \ closebutton.hpp \ color.hpp \ config.hpp \ defaultaccumulator.hpp \ file.hpp \ groupframe.hpp \ gtk-compat.hpp \ historyentry.hpp \ i18n.hpp \ serialize.hpp \ uri.hpp AM_CPPFLAGS = $(gobby_CFLAGS) $(unique_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code gobby-0.5.0/code/util/asyncoperation.cpp0000644000175000017500000000451112370427450015175 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/asyncoperation.hpp" #include #include #include Gobby::AsyncOperation::Handle::Handle(AsyncOperation& operation): m_operation(&operation) { } Gobby::AsyncOperation::Handle::~Handle() { if(m_operation) { if(!m_operation->m_finished) cancel(); m_operation->m_handle = NULL; } } void Gobby::AsyncOperation::Handle::cancel() { assert(m_operation); assert(m_operation->m_finished == false); m_operation->m_finished = true; } Gobby::AsyncOperation::AsyncOperation(): m_thread(NULL), m_handle(NULL), m_finished(false) { } Gobby::AsyncOperation::~AsyncOperation() { if(m_handle) m_handle->m_operation = NULL; } std::auto_ptr Gobby::AsyncOperation::start(std::auto_ptr operation) { assert(operation->m_thread == NULL); assert(operation->m_handle == NULL); assert(operation->m_finished == false); AsyncOperation* op = operation.release(); std::auto_ptr handle(new Handle(*op)); op->m_handle = handle.get(); op->m_thread = Glib::Thread::create( sigc::mem_fun(*op, &AsyncOperation::thread_run), true); return handle; } void Gobby::AsyncOperation::thread_run() { run(); Glib::signal_idle().connect( sigc::mem_fun(*this, &AsyncOperation::done)); } bool Gobby::AsyncOperation::done() { if(!m_finished) { // m_handle DTOR cancels the operation g_assert(m_handle != NULL); m_finished = true; finish(); } if(m_handle) m_handle->m_operation = NULL; delete this; return false; } gobby-0.5.0/code/util/historyentry.hpp0000644000175000017500000000500512370427450014726 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_HISTORYENTRY_HPP_ #define _GOBBY_HISTORYENTRY_HPP_ #include #include #include #include "util/gtk-compat.hpp" #include namespace Gobby { class History { public: class Columns: public Gtk::TreeModelColumnRecord { public: Columns() { add(text); } Gtk::TreeModelColumn text; }; History(const std::string& history_file, unsigned int length); History(unsigned int length); ~History(); Glib::RefPtr get_store(); const Columns& get_columns() const; bool up(const Glib::ustring& current, Glib::ustring& entry); bool down(const Glib::ustring& current, Glib::ustring& entry); void commit(const Glib::ustring& str); protected: void commit_noscroll(const Glib::ustring& str); const unsigned int m_length; const Columns m_history_columns; Glib::RefPtr m_history; Gtk::TreeIter m_current; std::string m_history_file; private: class Loader; std::auto_ptr m_loader; }; class HistoryEntry: public Gtk::Entry { public: HistoryEntry(const std::string& history_file, unsigned int length); HistoryEntry(unsigned int length); void commit(); protected: virtual bool on_key_press_event(GdkEventKey* event); History m_history; }; class HistoryComboBoxEntry: public GtkCompat::ComboBoxEntry { public: HistoryComboBoxEntry(const std::string& history_file, unsigned int length); HistoryComboBoxEntry(unsigned int length); void commit(); Glib::RefPtr get_accessible(); protected: bool on_entry_key_press_event(GdkEventKey* event); History m_history; }; } // namespace Gobby #endif // _GOBBY_HISTORYENTRY_HPP_ gobby-0.5.0/code/util/serialize.cpp0000644000175000017500000000460712370427450014134 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/serialize.hpp" const char* Gobby::serialize::type_name::name = "int"; const char* Gobby::serialize::type_name::name = "long"; const char* Gobby::serialize::type_name::name = "short"; const char* Gobby::serialize::type_name::name = "char"; const char* Gobby::serialize::type_name::name = "unsigned int"; const char* Gobby::serialize::type_name::name = "unsigned long"; const char* Gobby::serialize::type_name::name = "unsigned short"; const char* Gobby::serialize::type_name::name = "unsigned char"; const char* Gobby::serialize::type_name::name = "float"; const char* Gobby::serialize::type_name::name = "double"; const char* Gobby::serialize::type_name::name = "long double"; const char* Gobby::serialize::type_name::name = "bool"; Gobby::serialize::conversion_error:: conversion_error(const std::string& message): std::runtime_error(message) { } Gobby::serialize::data::data(const std::string& serialized): m_serialized(serialized) { } const std::string& Gobby::serialize::data::serialized() const { return m_serialized; } std::string Gobby::serialize::default_context_to:: to_string(const data_type& from) const { return from; } Gobby::serialize::default_context_from::data_type Gobby::serialize::default_context_from:: from_string(const data_type& from) const { return from; } std::string Gobby::serialize::default_context_to:: to_string(const data_type& from) const { return from; } gobby-0.5.0/code/util/closebutton.cpp0000644000175000017500000000351212370427450014500 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "util/closebutton.hpp" #include #include #include Gobby::CloseButton::CloseButton() { set_relief(Gtk::RELIEF_NONE); set_focus_on_click(false); //set_flags(get_flags() & ~Gtk::CAN_FOCUS); GtkRcStyle* rc_style = gtk_rc_style_new(); rc_style->xthickness = 0; rc_style->ythickness = 0; gtk_widget_modify_style(GTK_WIDGET(gobj()), rc_style); g_object_unref(rc_style); Gtk::Image* button_image = Gtk::manage( new Gtk::Image(Gtk::Stock::CLOSE, Gtk::ICON_SIZE_MENU)); add(*button_image); button_image->show(); } #ifdef USE_GTKMM3 void Gobby::CloseButton::on_style_updated() #else void Gobby::CloseButton::on_style_changed( const Glib::RefPtr& previous_style) #endif { int width; int height; gtk_icon_size_lookup_for_settings( gtk_widget_get_settings(GTK_WIDGET(gobj())), GTK_ICON_SIZE_MENU, &width, &height); set_size_request(width + 2, height + 2); } gobby-0.5.0/code/util/color.hpp0000644000175000017500000000234412370427450013264 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_COLORUTIL_HPP_ #define _GOBBY_COLORUTIL_HPP_ #include namespace Gobby { void hsv_to_rgb(double& rh, double &gs, double &gv); void rgb_to_hsv(double &rh, double &gs, double &gv); double hue_from_gdk_color(const Gdk::Color& color); Gdk::Color hue_to_gdk_color(double hue, double saturation, double value); } #endif // _GOBBY_COLORUTIL_HPP_ gobby-0.5.0/code/dialogs/0000755000175000017500000000000012376162132012156 500000000000000gobby-0.5.0/code/dialogs/goto-dialog.hpp0000644000175000017500000000327712370427450015026 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_GOTODIALOG_HPP_ #define _GOBBY_GOTODIALOG_HPP_ #include "core/folder.hpp" #include "core/sessionview.hpp" #include #include #include #include namespace Gobby { class GotoDialog: public Gtk::Dialog { public: GotoDialog(Gtk::Window& parent, const Folder& m_folder); ~GotoDialog(); protected: static void on_changed_static(GtkTextBuffer* buffer, gpointer user_data) { static_cast(user_data)->on_changed(); } virtual void on_show(); virtual void on_response(int id); void on_document_changed(SessionView* view); void on_changed(); const Folder& m_folder; Gtk::Table m_table; Gtk::Label m_label_line; Gtk::SpinButton m_entry_line; TextSessionView* m_current_view; gulong m_changed_handler; }; } #endif // _GOBBY_GOTODIALOG_HPP_ gobby-0.5.0/code/dialogs/connection-dialog.cpp0000644000175000017500000000455412370427450016207 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/connection-dialog.hpp" #include "util/i18n.hpp" #include // TODO: Merge this with entrydialog and passworddialog to a slightly more // generic entry dialog. Gobby::ConnectionDialog::ConnectionDialog(Gtk::Window& parent): Gtk::Dialog(_("Connect to Server"), parent), m_box(false, 12), m_rightbox(false, 6), m_promptbox(false, 12), m_image(Gtk::Stock::NETWORK, Gtk::ICON_SIZE_DIALOG), m_intro_label(_("Please enter a host name with which " "to establish a connection.")), m_prompt_label(_("_Remote Endpoint:"), true) { m_prompt_label.set_mnemonic_widget(m_entry); m_promptbox.pack_start(m_prompt_label, Gtk::PACK_SHRINK); m_entry.set_activates_default(true); m_promptbox.pack_start(m_entry, Gtk::PACK_EXPAND_WIDGET); m_rightbox.pack_start(m_intro_label, Gtk::PACK_SHRINK); m_rightbox.pack_start(m_promptbox, Gtk::PACK_SHRINK); m_box.pack_start(m_image, Gtk::PACK_SHRINK); m_box.pack_start(m_rightbox, Gtk::PACK_EXPAND_WIDGET); m_box.show_all(); get_vbox()->set_spacing(6); get_vbox()->pack_start(m_box, Gtk::PACK_EXPAND_WIDGET); set_resizable(false); set_border_width(12); } Glib::ustring Gobby::ConnectionDialog::get_host_name() const { return m_entry.get_text(); } void Gobby::ConnectionDialog::on_show() { Gtk::Dialog::on_show(); // We can't do this in the constructor, because the buttons are added // by the caller after the widget has been constructed. set_default_response(Gtk::RESPONSE_ACCEPT); m_entry.select_region(0, m_entry.get_text().length()); m_entry.grab_focus(); } gobby-0.5.0/code/dialogs/preferences-dialog.cpp0000644000175000017500000010564012370734233016347 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/preferences-dialog.hpp" #include "util/color.hpp" #include "util/i18n.hpp" #include "util/gtk-compat.hpp" #include #include #include #include #include #include #include #include namespace { using namespace Gobby; Gtk::Widget* indent(Gtk::Widget& widget) { Gtk::Alignment* alignment = new Gtk::Alignment; alignment->set_padding(0, 0, 12, 0); alignment->add(widget); alignment->show(); return Gtk::manage(alignment); } Gtk::WrapMode wrap_mode_from_check_buttons(Gtk::CheckButton& char_button, Gtk::CheckButton& word_button) { if(!char_button.get_active()) return Gtk::WRAP_NONE; else if(!word_button.get_active()) return Gtk::WRAP_CHAR; else return Gtk::WRAP_WORD_CHAR; } Pango::FontDescription create_description(const Glib::ustring& str) { return Pango::FontDescription(str); } template void connect_option(Gtk::CheckButton& checkbutton, Preferences::Option& option) { checkbutton.signal_toggled().connect( sigc::compose( sigc::mem_fun( option, &Preferences::Option::set ), sigc::mem_fun( checkbutton, &Gtk::CheckButton::get_active ) ) ); } template void connect_option(Gtk::Scale& scale, Preferences::Option& option) { scale.signal_value_changed().connect( sigc::compose( sigc::mem_fun( option, &Preferences::Option::set ), sigc::mem_fun( scale, &Gtk::Scale::get_value ) ) ); } template void connect_option(Gtk::SpinButton& spinbutton, Preferences::Option& option) { spinbutton.signal_value_changed().connect( sigc::compose( sigc::mem_fun( option, &Preferences::Option::set ), sigc::mem_fun( spinbutton, &Gtk::SpinButton::get_value ) ) ); } template void connect_option(Gtk::Entry& entry, Preferences::Option& option) { entry.signal_changed().connect( sigc::compose( sigc::mem_fun( option, &Preferences::Option::set ), sigc::mem_fun( entry, &Gtk::Entry::get_text ) ) ); } void connect_wrap_option(Gtk::CheckButton& char_button, Gtk::CheckButton& word_button, Preferences::Option& option) { sigc::slot toggled_slot( sigc::compose( sigc::mem_fun( option, &Preferences::Option< Gtk::WrapMode>::set ), sigc::bind( sigc::ptr_fun( wrap_mode_from_check_buttons), sigc::ref(char_button), sigc::ref(word_button) ) ) ); char_button.signal_toggled().connect(toggled_slot); word_button.signal_toggled().connect(toggled_slot); } void connect_hue_option(Gtk::ColorButton& color_button, Preferences::Option& option) { color_button.property_color().signal_changed().connect( sigc::compose( sigc::mem_fun( option, &Preferences::Option::set ), sigc::compose( sigc::ptr_fun(&hue_from_gdk_color), sigc::mem_fun( color_button, &Gtk::ColorButton::get_color ) ) ) ); } } Gobby::PreferencesDialog::Page::Page(): Gtk::Frame(), m_box(false, 12) { Gtk::Frame::add(m_box); m_box.show(); // Remove shadow - use the frame just as container set_shadow_type(Gtk::SHADOW_NONE); set_border_width(12); } void Gobby::PreferencesDialog::Page::add(Gtk::Widget& widget, bool expand) { m_box.pack_start(widget, expand ? Gtk::PACK_EXPAND_WIDGET : Gtk::PACK_SHRINK); } Gobby::PreferencesDialog::User::User(Gtk::Window& parent, Preferences& preferences): m_group_settings(_("Settings")), m_group_remote(_("Remote Users")), m_group_local(_("Local Documents")), m_box_user_name(false, 6), m_lbl_user_name(_("User name:"), GtkCompat::ALIGN_LEFT), m_box_user_color(false, 6), m_lbl_user_color(_("User color:"), GtkCompat::ALIGN_LEFT), m_box_user_alpha(false, 6), m_lbl_user_alpha(_("Color intensity:"), GtkCompat::ALIGN_LEFT), m_scl_user_alpha(0.0, 1.0, 0.025), m_btn_user_color(_("Choose a new user color"), parent), m_btn_remote_show_cursors(_("Show cursors of remote users")), m_btn_remote_show_selections(_("Show selections of remote users")), m_btn_remote_show_current_lines( _("Highlight current line of remote users")), m_btn_remote_show_cursor_positions( _("Indicate cursor position of remote users " "in the scrollbar")), m_btn_local_allow_connections( _("Allow remote users to edit local documents")), m_btn_local_require_password( _("Require remote users to enter a password")), m_lbl_local_password(_("Password:"), GtkCompat::ALIGN_LEFT), m_box_local_password(false, 6), m_lbl_local_port(_("Port:"), GtkCompat::ALIGN_LEFT), m_box_local_port(false, 6), m_box_local_connections(false, 6), m_btn_local_keep_documents( _("Remember local documents after Gobby restart")), m_lbl_local_documents_directory(_("Local documents directory:")), m_btn_local_documents_directory( Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER), m_conn_local_documents_directory(m_btn_local_documents_directory, preferences.user.host_directory), m_box_local_documents_directory(false, 6), m_size_group(Gtk::SizeGroup::create(Gtk::SIZE_GROUP_HORIZONTAL)) { m_btn_local_allow_connections.signal_toggled().connect( sigc::mem_fun( *this, &User::on_local_allow_connections_toggled)); m_btn_local_require_password.signal_toggled().connect( sigc::mem_fun( *this, &User::on_local_require_password_toggled)); m_btn_local_keep_documents.signal_toggled().connect( sigc::mem_fun( *this, &User::on_local_keep_documents_toggled)); m_lbl_user_name.show(); m_ent_user_name.set_text(preferences.user.name); m_ent_user_name.show(); connect_option(m_ent_user_name, preferences.user.name); m_box_user_name.pack_start(m_lbl_user_name, Gtk::PACK_SHRINK); m_box_user_name.pack_start(m_ent_user_name, Gtk::PACK_SHRINK); m_box_user_name.show(); m_btn_user_color.set_hue(preferences.user.hue); m_btn_user_color.set_saturation(0.35); m_btn_user_color.set_value(1.0); m_btn_user_color.set_size_request(150, -1); m_lbl_user_color.show(); m_btn_user_color.show(); connect_hue_option(m_btn_user_color, preferences.user.hue); m_box_user_color.pack_start(m_lbl_user_color, Gtk::PACK_SHRINK); m_box_user_color.pack_start( m_btn_user_color, Gtk::PACK_SHRINK); m_box_user_color.show(); m_lbl_user_alpha.show(); m_scl_user_alpha.set_value(preferences.user.alpha); m_scl_user_alpha.set_show_fill_level(false); m_scl_user_alpha.set_draw_value(false); m_scl_user_alpha.show(); connect_option(m_scl_user_alpha, preferences.user.alpha); m_box_user_alpha.pack_start(m_lbl_user_alpha, Gtk::PACK_SHRINK); m_box_user_alpha.pack_start( m_scl_user_alpha, Gtk::PACK_EXPAND_WIDGET); m_box_user_alpha.show(); m_group_settings.add(m_box_user_name); m_group_settings.add(m_box_user_color); m_group_settings.add(m_box_user_alpha); m_size_group->add_widget(m_lbl_user_name); m_size_group->add_widget(m_lbl_user_color); m_size_group->add_widget(m_lbl_user_alpha); m_group_settings.show(); m_btn_remote_show_cursors.set_active( preferences.user.show_remote_cursors); m_btn_remote_show_cursors.show(); connect_option(m_btn_remote_show_cursors, preferences.user.show_remote_cursors); m_btn_remote_show_selections.set_active( preferences.user.show_remote_selections); m_btn_remote_show_selections.show(); connect_option(m_btn_remote_show_selections, preferences.user.show_remote_selections); m_btn_remote_show_current_lines.set_active( preferences.user.show_remote_current_lines); m_btn_remote_show_current_lines.show(); connect_option(m_btn_remote_show_current_lines, preferences.user.show_remote_current_lines); m_btn_remote_show_cursor_positions.set_active( preferences.user.show_remote_cursor_positions); m_btn_remote_show_cursor_positions.show(); connect_option(m_btn_remote_show_cursor_positions, preferences.user.show_remote_cursor_positions); m_group_remote.add(m_btn_remote_show_cursors); m_group_remote.add(m_btn_remote_show_selections); m_group_remote.add(m_btn_remote_show_current_lines); m_group_remote.add(m_btn_remote_show_cursor_positions); m_group_remote.show(); // TODO: Set mnemonics // m_lbl_autosave_interval.set_mnemonic_widget(m_ent_autosave_interval); m_btn_local_allow_connections.set_active( preferences.user.allow_remote_access); m_btn_local_allow_connections.show(); connect_option(m_btn_local_allow_connections, preferences.user.allow_remote_access); m_btn_local_require_password.set_active( preferences.user.require_password); m_btn_local_require_password.show(); connect_option(m_btn_local_require_password, preferences.user.require_password); m_lbl_local_password.show(); m_ent_local_password.set_visibility(false); m_ent_local_password.set_text( static_cast(preferences.user.password)); m_ent_local_password.show(); connect_option(m_ent_local_password, preferences.user.password); m_box_local_password.pack_start(m_lbl_local_password, Gtk::PACK_SHRINK); m_box_local_password.pack_start(m_ent_local_password, Gtk::PACK_SHRINK); m_box_local_password.set_sensitive(preferences.user.require_password); m_box_local_password.show(); m_lbl_local_port.show(); m_ent_local_port.set_range(1, 65535); m_ent_local_port.set_value(preferences.user.port); m_ent_local_port.set_increments(1, 1); m_ent_local_port.show(); connect_option(m_ent_local_port, preferences.user.port); m_box_local_port.pack_start(m_lbl_local_port, Gtk::PACK_SHRINK); m_box_local_port.pack_start(m_ent_local_port, Gtk::PACK_SHRINK); m_box_local_port.show(); m_box_local_connections.pack_start(m_btn_local_require_password, Gtk::PACK_SHRINK); m_box_local_connections.pack_start(*indent(m_box_local_password), Gtk::PACK_SHRINK); m_box_local_connections.pack_start(m_box_local_port, Gtk::PACK_SHRINK); m_box_local_connections.set_sensitive( preferences.user.allow_remote_access); m_box_local_connections.show(); m_btn_local_keep_documents.set_active( preferences.user.keep_local_documents); m_btn_local_keep_documents.show(); connect_option(m_btn_local_keep_documents, preferences.user.keep_local_documents); m_lbl_local_documents_directory.show(); m_btn_local_documents_directory.set_width_chars(20); m_btn_local_documents_directory.set_filename( static_cast(preferences.user.host_directory)); m_btn_local_documents_directory.show(); m_box_local_documents_directory.pack_start( m_lbl_local_documents_directory, Gtk::PACK_SHRINK); m_box_local_documents_directory.pack_start( m_btn_local_documents_directory, Gtk::PACK_SHRINK); m_box_local_documents_directory.set_sensitive( preferences.user.keep_local_documents); m_box_local_documents_directory.show(); m_group_local.add(m_btn_local_allow_connections); m_group_local.add(*indent(m_box_local_connections)); m_group_local.add(m_btn_local_keep_documents); m_group_local.add(*indent(m_box_local_documents_directory)); m_group_local.show(); add(m_group_settings, false); add(m_group_remote, false); add(m_group_local, false); } void Gobby::PreferencesDialog::User::on_local_allow_connections_toggled() { m_box_local_connections.set_sensitive( m_btn_local_allow_connections.get_active()); } void Gobby::PreferencesDialog::User::on_local_require_password_toggled() { m_box_local_password.set_sensitive( m_btn_local_require_password.get_active()); } void Gobby::PreferencesDialog::User::on_local_keep_documents_toggled() { m_box_local_documents_directory.set_sensitive( m_btn_local_keep_documents.get_active()); } Gobby::PreferencesDialog::Editor::Editor(Preferences& preferences): m_group_tab(_("Tab Stops")), m_group_indentation(_("Indentation")), m_group_homeend(_("Home/End Behavior")), m_group_saving(_("File Saving")), m_lbl_tab_width(_("_Tab width:"), GtkCompat::ALIGN_RIGHT, Gtk::ALIGN_CENTER, true), m_btn_tab_spaces(_("Insert _spaces instead of tabs"), true), m_btn_indentation_auto(_("Enable automatic _indentation"), true), m_btn_homeend_smart(_("Smart _home/end"), true), m_btn_autosave_enabled(_("Enable _automatic saving of documents"), true), m_lbl_autosave_interval(_("Autosave interval in _minutes:"), true) { unsigned int tab_width = preferences.editor.tab_width; bool tab_spaces = preferences.editor.tab_spaces; bool indentation_auto = preferences.editor.indentation_auto; bool homeend_smart = preferences.editor.homeend_smart; unsigned int autosave_enabled = preferences.editor.autosave_enabled; unsigned int autosave_interval = preferences.editor.autosave_interval; m_btn_autosave_enabled.signal_toggled().connect( sigc::mem_fun(*this, &Editor::on_autosave_enabled_toggled)); m_lbl_tab_width.set_mnemonic_widget(m_ent_tab_width); m_lbl_tab_width.show(); m_ent_tab_width.set_range(1, 8); m_ent_tab_width.set_value(tab_width); m_ent_tab_width.set_increments(1, 1); m_ent_tab_width.show(); connect_option(m_ent_tab_width, preferences.editor.tab_width); m_btn_homeend_smart.set_tooltip_text( _("With this option enabled, Home/End keys move to " "first/last character before going to the start/end of the " "line.") ); m_box_tab_width.set_spacing(6); m_box_tab_width.pack_start(m_lbl_tab_width, Gtk::PACK_SHRINK); m_box_tab_width.pack_start(m_ent_tab_width, Gtk::PACK_SHRINK); m_box_tab_width.show(); m_btn_tab_spaces.set_active(tab_spaces); m_btn_tab_spaces.show(); connect_option(m_btn_tab_spaces, preferences.editor.tab_spaces); m_btn_indentation_auto.set_active(indentation_auto); m_btn_indentation_auto.show(); connect_option(m_btn_indentation_auto, preferences.editor.indentation_auto); m_btn_homeend_smart.set_active(homeend_smart); m_btn_homeend_smart.show(); connect_option(m_btn_homeend_smart, preferences.editor.homeend_smart); m_btn_autosave_enabled.set_active(autosave_enabled); m_btn_autosave_enabled.show(); connect_option(m_btn_autosave_enabled, preferences.editor.autosave_enabled); m_lbl_autosave_interval.set_mnemonic_widget(m_ent_autosave_interval); m_lbl_autosave_interval.show(); m_ent_autosave_interval.set_range(1,60); m_ent_autosave_interval.set_value(autosave_interval); m_ent_autosave_interval.set_increments(1,10); m_ent_autosave_interval.show(); connect_option(m_ent_autosave_interval, preferences.editor.autosave_interval); m_box_autosave_interval.set_spacing(6); m_box_autosave_interval.pack_start(m_lbl_autosave_interval, Gtk::PACK_SHRINK); m_box_autosave_interval.pack_start(m_ent_autosave_interval, Gtk::PACK_SHRINK); m_box_autosave_interval.set_sensitive(autosave_enabled); m_box_autosave_interval.show(); m_group_tab.add(m_box_tab_width); m_group_tab.add(m_btn_tab_spaces); m_group_tab.show(); m_group_indentation.add(m_btn_indentation_auto); m_group_indentation.show(); m_group_homeend.add(m_btn_homeend_smart); m_group_homeend.show(); m_group_saving.add(m_btn_autosave_enabled); m_group_saving.add(*indent(m_box_autosave_interval)); m_group_saving.show(); add(m_group_tab, false); add(m_group_indentation, false); add(m_group_homeend, false); add(m_group_saving, false); } void Gobby::PreferencesDialog::Editor::on_autosave_enabled_toggled() { m_box_autosave_interval.set_sensitive( m_btn_autosave_enabled.get_active()); } Gobby::PreferencesDialog::View::View(Preferences& preferences): m_group_wrap(_("Text Wrapping") ), m_group_linenum(_("Line Numbers") ), m_group_curline(_("Current Line") ), m_group_margin(_("Right Margin") ), m_group_bracket(_("Bracket Matching") ), m_group_spaces(_("Whitespace Display") ), m_btn_wrap_text(_("Enable text wrapping") ), m_btn_wrap_words(_("Do not split words over two lines") ), m_btn_linenum_display(_("Display line numbers") ), m_btn_curline_highlight(_("Highlight current line") ), m_btn_margin_display(_("Display right margin") ), m_lbl_margin_pos(_("Right margin at column:") ), m_btn_bracket_highlight(_("Highlight matching bracket") ), m_cmb_spaces_display(preferences.view.whitespace_display) { Gtk::WrapMode mode = preferences.view.wrap_mode; bool linenum_display = preferences.view.linenum_display; bool curline_highlight = preferences.view.curline_highlight; bool margin_display = preferences.view.margin_display; unsigned int margin_pos = preferences.view.margin_pos; bool bracket_highlight = preferences.view.bracket_highlight; m_btn_margin_display.signal_toggled().connect( sigc::mem_fun(*this, &View::on_margin_display_toggled)); m_btn_wrap_text.signal_toggled().connect( sigc::mem_fun(*this, &View::on_wrap_text_toggled)); m_lbl_margin_pos.show(); m_ent_margin_pos.set_range(1, 1024); m_ent_margin_pos.set_value(margin_pos); m_ent_margin_pos.set_increments(1, 16); m_ent_margin_pos.show(); connect_option(m_ent_margin_pos, preferences.view.margin_pos); m_btn_wrap_text.set_active(mode != Gtk::WRAP_NONE); m_btn_wrap_text.show(); m_btn_wrap_words.set_active(mode == Gtk::WRAP_WORD_CHAR); m_btn_wrap_words.set_sensitive(mode != Gtk::WRAP_NONE); m_btn_wrap_words.show(); connect_wrap_option(m_btn_wrap_text, m_btn_wrap_words, preferences.view.wrap_mode); m_btn_linenum_display.set_active(linenum_display); m_btn_linenum_display.show(); connect_option(m_btn_linenum_display, preferences.view.linenum_display); m_btn_curline_highlight.set_active(curline_highlight); m_btn_curline_highlight.show(); connect_option(m_btn_curline_highlight, preferences.view.curline_highlight); m_btn_margin_display.set_active(margin_display); m_btn_margin_display.show(); connect_option(m_btn_margin_display, preferences.view.margin_display); m_btn_bracket_highlight.set_active(bracket_highlight); m_btn_bracket_highlight.show(); connect_option(m_btn_bracket_highlight, preferences.view.bracket_highlight); // TODO: When we require a higher version of GtkSourceView, then // we should add GTK_SOURCE_DRAW_SPACES_NBSP here. const int SOURCE_DRAW_SPACES = GTK_SOURCE_DRAW_SPACES_SPACE; m_cmb_spaces_display.add( _("Display no whitespace"), static_cast(0)); m_cmb_spaces_display.add( _("Display spaces"), static_cast( SOURCE_DRAW_SPACES)); m_cmb_spaces_display.add( _("Display tabs"), static_cast( GTK_SOURCE_DRAW_SPACES_TAB)); m_cmb_spaces_display.add( _("Display tabs and spaces"), static_cast( SOURCE_DRAW_SPACES | GTK_SOURCE_DRAW_SPACES_TAB)); m_cmb_spaces_display.show(); m_box_margin_pos.set_spacing(6); m_box_margin_pos.set_sensitive(margin_display); m_box_margin_pos.pack_start(m_lbl_margin_pos, Gtk::PACK_SHRINK); m_box_margin_pos.pack_start(*indent(m_ent_margin_pos), Gtk::PACK_SHRINK); m_box_margin_pos.show(); m_group_wrap.add(m_btn_wrap_text); m_group_wrap.add(*indent(m_btn_wrap_words)); m_group_wrap.show(); m_group_linenum.add(m_btn_linenum_display); m_group_linenum.show(); m_group_curline.add(m_btn_curline_highlight); m_group_curline.show(); m_group_margin.add(m_btn_margin_display); m_group_margin.add(m_box_margin_pos); m_group_margin.show(); m_group_bracket.add(m_btn_bracket_highlight); m_group_bracket.show(); m_group_spaces.add(m_cmb_spaces_display); m_group_spaces.show(); add(m_group_wrap, false); add(m_group_linenum, false); add(m_group_curline, false); add(m_group_margin, false); add(m_group_bracket, false); add(m_group_spaces, false); } void Gobby::PreferencesDialog::View::on_wrap_text_toggled() { m_btn_wrap_words.set_sensitive(m_btn_wrap_text.get_active()); } void Gobby::PreferencesDialog::View::on_margin_display_toggled() { m_box_margin_pos.set_sensitive(m_btn_margin_display.get_active()); } Gobby::PreferencesDialog::Appearance::Appearance(Preferences& preferences): m_group_toolbar(_("Toolbar") ), m_group_font(_("Font") ), m_group_scheme(_("Color Scheme")), m_cmb_toolbar_style(preferences.appearance.toolbar_style), m_conn_font(m_btn_font, preferences.appearance.font), m_list(Gtk::ListStore::create(m_columns)), m_tree(m_list) { const Pango::FontDescription& font = preferences.appearance.font; m_cmb_toolbar_style.add(_("Show text only"), Gtk::TOOLBAR_TEXT); m_cmb_toolbar_style.add(_("Show icons only"), Gtk::TOOLBAR_ICONS); m_cmb_toolbar_style.add(_("Show both icons and text"), Gtk::TOOLBAR_BOTH ); m_cmb_toolbar_style.add(_("Show text besides icons"), Gtk::TOOLBAR_BOTH_HORIZ ); m_cmb_toolbar_style.show(); m_conn_font.block(); m_btn_font.set_font_name(font.to_string()); m_btn_font.show(); m_conn_font.unblock(); m_group_toolbar.add(m_cmb_toolbar_style); m_group_toolbar.show(); m_group_font.add(m_btn_font); m_group_font.show(); Gtk::TreeViewColumn column_name; Gtk::CellRendererText renderer_name; column_name.pack_start(renderer_name, false); column_name.add_attribute(renderer_name.property_text(), m_columns.name); m_tree.append_column(column_name);//"Scheme Name", m_columns.name); m_tree.append_column("Scheme description", m_columns.description); Pango::AttrList list; Pango::Attribute attr(Pango::Attribute::create_attr_weight(Pango::WEIGHT_BOLD)); list.insert(attr); renderer_name.property_attributes() = list; m_tree.set_headers_visible(false); m_tree.show(); Gtk::ScrolledWindow* scroll = Gtk::manage(new Gtk::ScrolledWindow); scroll->set_shadow_type(Gtk::SHADOW_IN); scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); scroll->add(m_tree); scroll->show(); m_group_scheme.add(*scroll); m_group_scheme.show(); GtkSourceStyleSchemeManager* manager = gtk_source_style_scheme_manager_get_default(); const gchar* const* ids = gtk_source_style_scheme_manager_get_scheme_ids(manager); Glib::ustring current_scheme = preferences.appearance.scheme_id; for (const gchar* const* id = ids; *id != NULL; ++id) { GtkSourceStyleScheme* scheme = gtk_source_style_scheme_manager_get_scheme(manager, *id); const gchar* name = gtk_source_style_scheme_get_name(scheme); const gchar* desc = gtk_source_style_scheme_get_description(scheme); Gtk::TreeIter iter = m_list->append(); (*iter)[m_columns.name] = name; (*iter)[m_columns.description] = desc; (*iter)[m_columns.scheme] = scheme; if (current_scheme == gtk_source_style_scheme_get_id(scheme)) m_tree.get_selection()->select(iter); } m_tree.get_selection()->signal_changed().connect( sigc::bind( sigc::mem_fun(*this, &Appearance::on_scheme_changed), sigc::ref(preferences))); #ifdef USE_GTKMM3 m_list->set_sort_column(m_columns.name, Gtk::SORT_ASCENDING); #else m_list->set_sort_column_id(m_columns.name, Gtk::SORT_ASCENDING); #endif add(m_group_toolbar, false); add(m_group_font, false); add(m_group_scheme, true); } void Gobby::PreferencesDialog::Appearance::on_scheme_changed(Preferences& preferences) { Gtk::TreeIter iter = m_tree.get_selection()->get_selected(); GtkSourceStyleScheme* scheme = (*iter)[m_columns.scheme]; preferences.appearance.scheme_id = gtk_source_style_scheme_get_id(scheme); } Gobby::PreferencesDialog::Security::Security(Gtk::Window& parent, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager): m_preferences(preferences), m_parent(parent), m_file_chooser(file_chooser), m_cert_manager(cert_manager), m_group_trust_file(_("Trusted CAs")), m_group_connection_policy(_("Secure Connection")), m_group_authentication(_("Authentication")), m_btn_path_trust_file(_("Select a file containing trusted CAs")), m_conn_path_trust_file(m_btn_path_trust_file, preferences.security.trust_file), m_error_trust_file("", GtkCompat::ALIGN_LEFT), m_cmb_connection_policy(preferences.security.policy), m_btn_auth_none(_("None")), m_btn_auth_cert(_("Use a certificate")), m_lbl_key_file(_("Private key:"), GtkCompat::ALIGN_LEFT), m_btn_key_file(_("Select a private key file")), m_conn_path_key_file(m_btn_key_file, preferences.security.key_file), m_btn_key_file_create(_("Create New...")), m_box_key_file(false, 6), m_error_key_file("", GtkCompat::ALIGN_LEFT), m_lbl_cert_file(_("Certificate:"), GtkCompat::ALIGN_LEFT), m_btn_cert_file(_("Select a certificate file")), m_conn_path_cert_file(m_btn_cert_file, preferences.security.certificate_file), m_btn_cert_file_create(_("Create New...")), m_box_cert_file(false, 6), m_error_cert_file("", GtkCompat::ALIGN_LEFT), m_size_group(Gtk::SizeGroup::create(Gtk::SIZE_GROUP_HORIZONTAL)), m_key_generator_handle(NULL), m_cert_generator_handle(NULL) { m_cert_manager.signal_credentials_changed().connect( sigc::mem_fun(*this, &Security::on_credentials_changed)); m_btn_auth_cert.signal_toggled().connect( sigc::mem_fun(*this, &Security::on_auth_cert_toggled)); m_btn_path_trust_file.set_width_chars(20); const std::string& trust_file = preferences.security.trust_file; if(!trust_file.empty()) m_btn_path_trust_file.set_filename(trust_file); m_btn_path_trust_file.show(); m_group_trust_file.add(m_btn_path_trust_file); m_group_trust_file.add(m_error_trust_file); m_group_trust_file.show(); /* m_cmb_connection_policy.add( _("Never use a secure connection"), INF_XMPP_CONNECTION_SECURITY_ONLY_UNSECURED);*/ m_cmb_connection_policy.add( _("Use TLS if possible"), INF_XMPP_CONNECTION_SECURITY_BOTH_PREFER_TLS); m_cmb_connection_policy.add( _("Always use TLS"), INF_XMPP_CONNECTION_SECURITY_ONLY_TLS); m_cmb_connection_policy.show(); m_group_connection_policy.add(m_cmb_connection_policy); m_group_connection_policy.show(); Gtk::RadioButton::Group group; m_btn_auth_none.set_group(group); m_btn_auth_none.show(); m_btn_auth_cert.set_group(group); m_btn_auth_cert.show(); if(preferences.security.authentication_enabled) m_btn_auth_cert.set_active(true); else m_btn_auth_none.set_active(true); connect_option(m_btn_auth_cert, preferences.security.authentication_enabled); m_lbl_key_file.show(); m_btn_key_file.set_width_chars(20); const std::string& key_file = preferences.security.key_file; if(!key_file.empty()) { m_conn_path_key_file.block(); m_btn_key_file.set_filename(key_file); m_conn_path_key_file.unblock(); } m_btn_key_file.show(); m_btn_key_file_create.signal_clicked().connect( sigc::mem_fun(*this, &Security::on_create_key_clicked)); m_btn_key_file_create.show(); m_box_key_file.pack_start(m_lbl_key_file, Gtk::PACK_SHRINK); m_box_key_file.pack_start(m_btn_key_file, Gtk::PACK_SHRINK); m_box_key_file.pack_start(m_btn_key_file_create, Gtk::PACK_SHRINK); m_box_key_file.set_sensitive( preferences.security.authentication_enabled); m_box_key_file.show(); m_lbl_cert_file.show(); m_btn_cert_file.set_width_chars(20); const std::string& cert_file = preferences.security.certificate_file; if(!cert_file.empty()) { m_conn_path_cert_file.block(); m_btn_cert_file.set_filename(cert_file); m_conn_path_cert_file.unblock(); } m_btn_cert_file.show(); m_btn_cert_file_create.signal_clicked().connect( sigc::mem_fun(*this, &Security::on_create_cert_clicked)); m_btn_cert_file_create.show(); m_box_cert_file.pack_start(m_lbl_cert_file, Gtk::PACK_SHRINK); m_box_cert_file.pack_start(m_btn_cert_file, Gtk::PACK_SHRINK); m_box_cert_file.pack_start(m_btn_cert_file_create, Gtk::PACK_SHRINK); m_box_cert_file.set_sensitive( preferences.security.authentication_enabled); m_box_cert_file.show(); m_size_group->add_widget(m_lbl_key_file); m_size_group->add_widget(m_lbl_cert_file); m_group_authentication.add(m_btn_auth_none); m_group_authentication.add(m_btn_auth_cert); m_group_authentication.add(*indent(m_box_key_file)); m_group_authentication.add(*indent(m_error_key_file)); m_group_authentication.add(*indent(m_box_cert_file)); m_group_authentication.add(*indent(m_error_cert_file)); m_group_authentication.show(); on_credentials_changed(); add(m_group_trust_file, false); add(m_group_connection_policy, false); add(m_group_authentication, false); } void Gobby::PreferencesDialog::Security::set_file_error(Gtk::Label& label, const GError* error) { if(error != NULL) { label.set_markup( //"" + "" + std::string(_("Error reading file:")) + " " + Glib::Markup::escape_text(error->message) + ""); label.show(); } else { label.hide(); } } void Gobby::PreferencesDialog::Security::on_credentials_changed() { set_file_error(m_error_trust_file, m_cert_manager.get_trust_error()); if(m_key_generator_handle.get() == NULL) { set_file_error(m_error_key_file, m_cert_manager.get_key_error()); } else { m_error_key_file.set_text( _("2048-bit RSA private key is being " "generated, please wait...")); m_error_key_file.show(); } if(m_cert_generator_handle.get() == NULL) set_file_error(m_error_cert_file, m_cert_manager.get_certificate_error()); const bool operation_in_progress = m_key_generator_handle.get() != NULL || m_cert_generator_handle.get() != NULL; m_btn_key_file.set_sensitive(!operation_in_progress); m_btn_key_file_create.set_sensitive(!operation_in_progress); m_btn_cert_file.set_sensitive(!operation_in_progress); m_btn_cert_file_create.set_sensitive( !operation_in_progress && m_cert_manager.get_private_key() != NULL); } void Gobby::PreferencesDialog::Security::on_auth_cert_toggled() { m_box_key_file.set_sensitive(m_btn_auth_cert.get_active()); m_box_cert_file.set_sensitive(m_btn_auth_cert.get_active()); } void Gobby::PreferencesDialog::Security::on_create_key_clicked() { m_file_dialog.reset(new FileChooser::Dialog( m_file_chooser, m_parent, _("Select a location for the generated key"), Gtk::FILE_CHOOSER_ACTION_SAVE)); const std::string& key_file = m_preferences.security.key_file; if(!key_file.empty()) m_file_dialog->set_filename(key_file); m_file_dialog->signal_response().connect( sigc::mem_fun( *this, &Security::on_file_dialog_response_key)); m_file_dialog->present(); } void Gobby::PreferencesDialog::Security::on_create_cert_clicked() { m_file_dialog.reset(new FileChooser::Dialog( m_file_chooser, m_parent, _("Select a location for the generated certificate"), Gtk::FILE_CHOOSER_ACTION_SAVE)); const std::string& certificate_file = m_preferences.security.certificate_file; if(!certificate_file.empty()) m_file_dialog->set_filename(certificate_file); m_file_dialog->signal_response().connect( sigc::mem_fun( *this, &Security::on_file_dialog_response_certificate)); m_file_dialog->present(); } void Gobby::PreferencesDialog::Security::on_file_dialog_response_key( int response_id) { const std::string filename = m_file_dialog->get_filename(); m_file_dialog.reset(NULL); if(response_id == Gtk::RESPONSE_ACCEPT) { m_key_generator_handle = create_key( GNUTLS_PK_RSA, 2048, sigc::bind( sigc::mem_fun( *this, &Security::on_key_generated), filename)); on_credentials_changed(); } } void Gobby::PreferencesDialog::Security::on_file_dialog_response_certificate( int response_id) { const std::string filename = m_file_dialog->get_filename(); m_file_dialog.reset(NULL); if(response_id == Gtk::RESPONSE_ACCEPT && m_cert_manager.get_private_key() != NULL) { m_cert_generator_handle = create_self_signed_certificate( m_cert_manager.get_private_key(), sigc::bind( sigc::mem_fun( *this, &Security::on_cert_generated), filename)); on_credentials_changed(); } } void Gobby::PreferencesDialog::Security::on_key_generated( const KeyGeneratorHandle* handle, gnutls_x509_privkey_t key, const GError* error, const std::string& filename) { m_key_generator_handle.reset(NULL); m_cert_manager.set_private_key(key, filename.c_str(), error); } void Gobby::PreferencesDialog::Security::on_cert_generated( const CertificateGeneratorHandle* hndl, gnutls_x509_crt_t cert, const GError* error, const std::string& filename) { m_cert_generator_handle.reset(NULL); if(cert != NULL) { // Note this needs to be allocated with g_malloc, since it // is directly passed and freed by libinfinity gnutls_x509_crt_t* crt_array = static_cast( g_malloc(sizeof(gnutls_x509_crt_t))); crt_array[0] = cert; m_cert_manager.set_certificates( crt_array, 1, filename.c_str(), error); } else { m_cert_manager.set_certificates( NULL, 0, filename.c_str(), error); } } Gobby::PreferencesDialog::PreferencesDialog(Gtk::Window& parent, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager): Gtk::Dialog(_("Preferences"), parent), m_preferences(preferences), m_page_user(*this, preferences), m_page_editor(preferences), m_page_view(preferences), m_page_appearance(preferences), m_page_security(*this, file_chooser, preferences, cert_manager) { m_notebook.append_page(m_page_user, _("User")); m_notebook.append_page(m_page_editor, _("Editor")); m_notebook.append_page(m_page_view, _("View")); m_notebook.append_page(m_page_appearance, _("Appearance")); m_notebook.append_page(m_page_security, _("Security")); m_page_user.show(); m_page_editor.show(); m_page_view.show(); m_page_appearance.show(); m_page_security.show(); get_vbox()->set_spacing(6); get_vbox()->pack_start(m_notebook, Gtk::PACK_EXPAND_WIDGET); m_notebook.show(); add_button(Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE); set_border_width(12); set_resizable(false); } void Gobby::PreferencesDialog::on_response(int id) { hide(); } gobby-0.5.0/code/dialogs/Makefile.in0000644000175000017500000004211412376162111014142 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = code/dialogs DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ libgobby_dialogs_a_AR = $(AR) $(ARFLAGS) libgobby_dialogs_a_LIBADD = am_libgobby_dialogs_a_OBJECTS = connection-dialog.$(OBJEXT) \ document-location-dialog.$(OBJEXT) entry-dialog.$(OBJEXT) \ find-dialog.$(OBJEXT) goto-dialog.$(OBJEXT) \ initial-dialog.$(OBJEXT) open-location-dialog.$(OBJEXT) \ password-dialog.$(OBJEXT) preferences-dialog.$(OBJEXT) libgobby_dialogs_a_OBJECTS = $(am_libgobby_dialogs_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/code depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgobby_dialogs_a_SOURCES) DIST_SOURCES = $(libgobby_dialogs_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ noinst_LIBRARIES = libgobby-dialogs.a libgobby_dialogs_a_SOURCES = \ connection-dialog.cpp \ document-location-dialog.cpp \ entry-dialog.cpp \ find-dialog.cpp \ goto-dialog.cpp \ initial-dialog.cpp \ open-location-dialog.cpp \ password-dialog.cpp \ preferences-dialog.cpp noinst_HEADERS = \ connection-dialog.hpp \ document-location-dialog.hpp \ entry-dialog.hpp \ find-dialog.hpp \ goto-dialog.hpp \ initial-dialog.hpp \ open-location-dialog.hpp \ password-dialog.hpp \ preferences-dialog.hpp appicondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/gobby-0.5 AM_CPPFLAGS = $(gobby_CFLAGS) $(unique_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(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) --foreign code/dialogs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign code/dialogs/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(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) libgobby-dialogs.a: $(libgobby_dialogs_a_OBJECTS) $(libgobby_dialogs_a_DEPENDENCIES) $(EXTRA_libgobby_dialogs_a_DEPENDENCIES) $(AM_V_at)-rm -f libgobby-dialogs.a $(AM_V_AR)$(libgobby_dialogs_a_AR) libgobby-dialogs.a $(libgobby_dialogs_a_OBJECTS) $(libgobby_dialogs_a_LIBADD) $(AM_V_at)$(RANLIB) libgobby-dialogs.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connection-dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/document-location-dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/entry-dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/find-dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/goto-dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/initial-dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open-location-dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/password-dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/preferences-dialog.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` 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) $(HEADERS) 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-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 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-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic 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: gobby-0.5.0/code/dialogs/open-location-dialog.hpp0000644000175000017500000000265312370427450016622 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPENLOCATIONDIALOG_HPP_ #define _GOBBY_OPENLOCATIONDIALOG_HPP_ #include #include #include #include "util/historyentry.hpp" namespace Gobby { class OpenLocationDialog: public Gtk::Dialog { public: OpenLocationDialog(Gtk::Window& parent); Glib::ustring get_uri() const; void set_uri(const Glib::ustring& uri); protected: virtual void on_response(int response_id); virtual void on_show(); void on_entry_changed(); Gtk::VBox m_box; Gtk::Label m_label; HistoryComboBoxEntry m_combo; }; } #endif // _GOBBY_OPENLOCATIONDIALOG_HPP_ gobby-0.5.0/code/dialogs/password-dialog.cpp0000644000175000017500000000501412370427450015702 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/password-dialog.hpp" #include "util/i18n.hpp" #include Gobby::PasswordDialog::PasswordDialog(Gtk::Window& parent, const Glib::ustring& remote_id, unsigned int retry_counter): Gtk::Dialog(_("Password Required"), parent), m_box(false, 12), m_rightbox(false, 6), m_promptbox(false, 12), m_image(Gtk::Stock::DIALOG_AUTHENTICATION, Gtk::ICON_SIZE_DIALOG), m_intro_label(Glib::ustring::compose( (retry_counter == 0) ? _("Connection to host \"%1\" requires a password.") : _("Invalid password for host \"%1\". " "Please try again."), remote_id)), m_prompt_label(_("Server _Password:"), true) { m_prompt_label.set_mnemonic_widget(m_entry); m_promptbox.pack_start(m_prompt_label, Gtk::PACK_SHRINK); m_entry.set_visibility(false); m_entry.set_activates_default(true); m_promptbox.pack_start(m_entry, Gtk::PACK_EXPAND_WIDGET); m_rightbox.pack_start(m_intro_label, Gtk::PACK_SHRINK); m_rightbox.pack_start(m_promptbox, Gtk::PACK_SHRINK); m_box.pack_start(m_image, Gtk::PACK_SHRINK); m_box.pack_start(m_rightbox, Gtk::PACK_EXPAND_WIDGET); m_box.show_all(); get_vbox()->set_spacing(6); get_vbox()->pack_start(m_box, Gtk::PACK_EXPAND_WIDGET); set_resizable(false); set_border_width(12); } Glib::ustring Gobby::PasswordDialog::get_password() const { return m_entry.get_text(); } void Gobby::PasswordDialog::on_show() { Gtk::Dialog::on_show(); // We can't do this in the constructor, because the buttons are added // by the caller after the widget has been constructed. set_default_response(Gtk::RESPONSE_ACCEPT); m_entry.select_region(0, m_entry.get_text().length()); m_entry.grab_focus(); } gobby-0.5.0/code/dialogs/password-dialog.hpp0000644000175000017500000000277312370427450015720 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_PASSWORDDIALOG_HPP_ #define _GOBBY_PASSWORDDIALOG_HPP_ #include #include #include #include #include namespace Gobby { class PasswordDialog: public Gtk::Dialog { public: PasswordDialog(Gtk::Window& parent, const Glib::ustring& remote_id, unsigned int retry_counter); Glib::ustring get_password() const; protected: virtual void on_show(); Gtk::HBox m_box; Gtk::VBox m_rightbox; Gtk::HBox m_promptbox; Gtk::Image m_image; Gtk::Label m_intro_label; Gtk::Label m_prompt_label; Gtk::Entry m_entry; }; } #endif // _GOBBY_PASSWORDDIALOG_HPP_ gobby-0.5.0/code/dialogs/connection-dialog.hpp0000644000175000017500000000265212370427450016211 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CONNECTIONDIALOG_HPP_ #define _GOBBY_CONNECTIONDIALOG_HPP_ #include #include #include #include #include namespace Gobby { class ConnectionDialog: public Gtk::Dialog { public: ConnectionDialog(Gtk::Window& parent); Glib::ustring get_host_name() const; protected: virtual void on_show(); Gtk::HBox m_box; Gtk::VBox m_rightbox; Gtk::HBox m_promptbox; Gtk::Image m_image; Gtk::Label m_intro_label; Gtk::Label m_prompt_label; Gtk::Entry m_entry; }; } #endif // _GOBBY_CONNECTIONDIALOG_HPP_ gobby-0.5.0/code/dialogs/entry-dialog.hpp0000644000175000017500000000260112370427450015205 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_ENTRYDIALOG_HPP_ #define _GOBBY_ENTRYDIALOG_HPP_ #include #include #include #include namespace Gobby { class EntryDialog: public Gtk::Dialog { public: EntryDialog(Gtk::Window& parent, const Glib::ustring& title, const Glib::ustring& intro_text); Glib::ustring get_text() const; void set_text(const Glib::ustring& text); protected: virtual void on_show(); Gtk::HBox m_box; Gtk::Label m_intro_label; Gtk::Entry m_entry; }; } #endif // _GOBBY_ENTRYDIALOG_HPP_ gobby-0.5.0/code/dialogs/find-dialog.cpp0000644000175000017500000003217012370427450014763 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/find-dialog.hpp" #include "core/folder.hpp" #include "util/i18n.hpp" #include "util/gtk-compat.hpp" #include #include #include namespace { typedef gboolean (*TextSearchFunc)( const GtkTextIter*, const gchar*, Gobby::GtkCompat::TextSearchFlags, GtkTextIter*, GtkTextIter*, const GtkTextIter* ); const int RESPONSE_FIND = 1; const int RESPONSE_REPLACE = 2; const int RESPONSE_REPLACE_ALL = 3; } Gobby::FindDialog::FindDialog(Gtk::Window& parent, const Folder& folder, StatusBar& status_bar): Gtk::Dialog(_("Find"), parent), m_folder(folder), m_status_bar(status_bar), m_table_entries(2, 2), m_label_find(_("_Search for:"), GtkCompat::ALIGN_LEFT, Gtk::ALIGN_CENTER, true), m_label_replace(_("Replace _with:"), GtkCompat::ALIGN_LEFT, Gtk::ALIGN_CENTER, true), m_check_case(_("_Match case"), true), m_check_whole_word(_("Match _entire word only"), true), m_check_backwards(_("Search _backwards"), true), m_check_wrap_around(_("Wra_p around"), true) { m_entry_find.set_activates_default(true); m_entry_replace.set_activates_default(true); m_label_find.set_mnemonic_widget(m_entry_find); m_label_replace.set_mnemonic_widget(m_entry_replace); m_label_find.show(); m_entry_find.show(); m_table_entries.attach(m_label_find, 0, 1, 0, 1, Gtk::FILL, Gtk::FILL); m_table_entries.attach(m_label_replace, 0, 1, 1, 2, Gtk::FILL, Gtk::FILL); m_table_entries.attach(m_entry_find, 1, 2, 0, 1, Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK); m_table_entries.attach(m_entry_replace, 1, 2, 1, 2, Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK); m_table_entries.show(); m_table_entries.set_spacings(12); m_check_case.show(); m_check_whole_word.show(); m_check_backwards.show(); m_check_wrap_around.show(); m_check_wrap_around.set_active(true); m_box_main.pack_start(m_table_entries, Gtk::PACK_SHRINK); m_box_main.pack_start(m_check_case, Gtk::PACK_SHRINK); m_box_main.pack_start(m_check_whole_word, Gtk::PACK_SHRINK); m_box_main.pack_start(m_check_backwards, Gtk::PACK_SHRINK); m_box_main.pack_start(m_check_wrap_around, Gtk::PACK_SHRINK); m_box_main.set_spacing(12); m_box_main.show(); get_vbox()->pack_start(m_box_main); m_entry_find.signal_changed().connect( sigc::mem_fun(*this, &FindDialog::on_find_text_changed)); m_entry_replace.signal_changed().connect( sigc::mem_fun(*this, &FindDialog::on_replace_text_changed)); set_border_width(12); set_resizable(false); add_button(Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE); m_button_replace_all = add_button(_("Replace _All"), RESPONSE_REPLACE_ALL); m_button_replace = add_button(_("_Replace"), RESPONSE_REPLACE); add_button(Gtk::Stock::FIND, RESPONSE_FIND); set_default_response(RESPONSE_FIND); m_button_replace->set_image(*Gtk::manage(new Gtk::Image( Gtk::Stock::FIND_AND_REPLACE, Gtk::ICON_SIZE_BUTTON))); m_folder.signal_document_changed().connect( sigc::mem_fun(*this, &FindDialog::on_document_changed)); on_document_changed(m_folder.get_current_document()); } Gobby::FindDialog::~FindDialog() { on_document_changed(NULL); } bool Gobby::FindDialog::get_search_only() const { return GtkCompat::is_visible(m_label_replace); } void Gobby::FindDialog::set_search_only(bool search_only) { if(search_only) { m_label_replace.hide(); m_entry_replace.hide(); m_button_replace->hide(); m_button_replace_all->hide(); } else { m_label_replace.show(); m_entry_replace.show(); m_button_replace->show(); m_button_replace_all->show(); } set_title(search_only ? _("Find") : _("Replace") ); } Glib::ustring Gobby::FindDialog::get_find_text() const { return m_entry_find.get_text(); } Glib::ustring Gobby::FindDialog::get_replace_text() const { return m_entry_replace.get_text(); } bool Gobby::FindDialog::find_next() { bool result = find_and_select(NULL, SEARCH_FORWARD); if(!result) { Glib::ustring str = Glib::ustring::compose( _("Phrase \"%1\" has not been found"), get_find_text()); m_status_bar.add_info_message(str, 5); return false; } return true; } bool Gobby::FindDialog::find_previous() { bool result = find_and_select(NULL, SEARCH_BACKWARD); if(!result) { Glib::ustring str = Glib::ustring::compose( _("Phrase \"%1\" has not been found"), get_find_text()); m_status_bar.add_info_message(str, 5); return false; } return true; } void Gobby::FindDialog::on_show() { Gtk::Dialog::on_show(); m_entry_find.grab_focus(); } void Gobby::FindDialog::on_response(int id) { switch(id) { case Gtk::RESPONSE_CLOSE: hide(); break; case RESPONSE_FIND: find(); break; case RESPONSE_REPLACE: replace(); break; case RESPONSE_REPLACE_ALL: replace_all(); break; } Gtk::Dialog::on_response(id); } void Gobby::FindDialog::on_document_changed(SessionView* view) { m_active_user_changed_connection.disconnect(); TextSessionView* text_view = dynamic_cast(view); if(text_view != NULL) { m_active_user_changed_connection = text_view->signal_active_user_changed().connect( sigc::mem_fun( *this, &FindDialog::on_active_user_changed)); } update_sensitivity(); } void Gobby::FindDialog::on_active_user_changed(InfUser* user) { update_sensitivity(); } void Gobby::FindDialog::on_find_text_changed() { update_sensitivity(); m_signal_find_text_changed.emit(); } void Gobby::FindDialog::on_replace_text_changed() { m_signal_replace_text_changed.emit(); } Gobby::FindDialog::SearchDirection Gobby::FindDialog::get_direction() const { if(m_check_backwards.get_active()) return SEARCH_BACKWARD; else return SEARCH_FORWARD; } bool Gobby::FindDialog::find() { if(get_direction() == SEARCH_FORWARD) return find_next(); else return find_previous(); } bool Gobby::FindDialog::replace() { SessionView* view = m_folder.get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); // Get selected string Glib::ustring sel_str = text_view->get_selected_text(); Glib::ustring find_str = get_find_text(); // Lowercase both if we are comparing insensitive if(!m_check_case.get_active() ) { sel_str = sel_str.casefold(); find_str = find_str.casefold(); } // Replace them if they are the same if(sel_str == find_str) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER(text_view->get_text_buffer()); // Replace occurrence Glib::ustring replace_text = get_replace_text(); gtk_text_buffer_delete_selection(buffer, TRUE, TRUE); gtk_text_buffer_insert_at_cursor(buffer, replace_text.c_str(), replace_text.bytes()); // and find the next find_and_select(NULL, get_direction()); return true; } else { // Search the first occurrence return find(); } } bool Gobby::FindDialog::replace_all() { // TODO: Add helper function to get textsessionview? Maybe even add // to Folder? SessionView* view = m_folder.get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); GtkTextIter begin; GtkTextBuffer* buffer = GTK_TEXT_BUFFER(text_view->get_text_buffer()); gtk_text_buffer_get_start_iter(buffer, &begin); unsigned int replace_count = 0; GtkTextIter match_start, match_end; while(find_range(&begin, NULL, SEARCH_FORWARD, &match_start, &match_end)) { Glib::ustring replace_text = get_replace_text(); gtk_text_buffer_delete(buffer, &match_start, &match_end); gtk_text_buffer_insert(buffer, &match_start, replace_text.c_str(), replace_text.bytes()); ++ replace_count; begin = match_start; } Glib::ustring message; bool result; if(replace_count == 0) { message = _("No occurrence has been replaced"); result = false; } else { message = Glib::ustring::compose( ngettext("%1 occurrence has been replaced", "%1 occurrences have been replaced", replace_count), replace_count); result = true; } m_status_bar.add_info_message(message, 5); return result; } bool Gobby::FindDialog::find_and_select(const GtkTextIter* from, SearchDirection direction) { SessionView* view = m_folder.get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); const GtkTextIter* real_begin = from; GtkTextIter insert_iter; // Search from cursor position if from is not given if(from == NULL) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER(text_view->get_text_buffer()); GtkTextMark* mark = gtk_text_buffer_get_insert(buffer); gtk_text_buffer_get_iter_at_mark(buffer, &insert_iter, mark); real_begin = &insert_iter; } GtkTextIter match_start, match_end; if(find_wrap(real_begin, direction, &match_start, &match_end)) { if(direction == SEARCH_FORWARD) text_view->set_selection(&match_end, &match_start); else text_view->set_selection(&match_start, &match_end); return true; } return false; } bool Gobby::FindDialog::find_wrap(const GtkTextIter* from, SearchDirection direction, GtkTextIter* match_start, GtkTextIter* match_end) { SessionView* view = m_folder.get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); GtkTextIter start_pos = *from; bool result = find_range(&start_pos, NULL, direction, match_start, match_end); if(result == true) return true; if(!m_check_wrap_around.get_active()) return false; // Wrap around GtkTextIter restart_pos; GtkTextBuffer* buffer = GTK_TEXT_BUFFER(text_view->get_text_buffer()); if(direction == SEARCH_FORWARD) gtk_text_buffer_get_start_iter(buffer, &restart_pos); else gtk_text_buffer_get_end_iter(buffer, &restart_pos); // Limit to search to: Normally the position where we started. GtkTextIter* relimit = &start_pos; if(direction == SEARCH_BACKWARD) { // ??? gtk_text_iter_forward_chars(&start_pos, get_find_text().length()); if(gtk_text_iter_is_end(&start_pos)) relimit = NULL; } return find_range(&restart_pos, relimit, direction, match_start, match_end); } bool Gobby::FindDialog::find_range(const GtkTextIter* from, const GtkTextIter* to, SearchDirection direction, GtkTextIter* match_start, GtkTextIter* match_end) { GtkTextIter start_pos = *from; while(find_range_once(&start_pos, to, direction, match_start, match_end)) { if(m_check_whole_word.get_active() ) { if(!gtk_text_iter_starts_word(match_start) || !gtk_text_iter_ends_word(match_end)) { if(direction == SEARCH_FORWARD) start_pos = *match_end; else start_pos = *match_start; continue; } } return true; } return false; } bool Gobby::FindDialog::find_range_once(const GtkTextIter* from, const GtkTextIter* to, SearchDirection direction, GtkTextIter* match_start, GtkTextIter* match_end) { GtkCompat::TextSearchFlags flags = GtkCompat::TextSearchFlags(0); if(!m_check_case.get_active() ) flags = GtkCompat::TEXT_SEARCH_CASE_INSENSITIVE; TextSearchFunc search_func = (direction == SEARCH_FORWARD ? GtkCompat::text_iter_forward_search : GtkCompat::text_iter_backward_search); Glib::ustring find_str = m_entry_find.get_text(); gboolean result = search_func( from, find_str.c_str(), flags, match_start, match_end, to != NULL ? to : NULL ); return result; } void Gobby::FindDialog::update_sensitivity() { SessionView* view = m_folder.get_current_document(); TextSessionView* text_view = dynamic_cast(view); bool find_sensitivity = (!m_entry_find.get_text().empty() && text_view != NULL); bool replace_sensitivity = (find_sensitivity && text_view->get_active_user() != NULL); set_response_sensitive(RESPONSE_FIND, find_sensitivity); set_response_sensitive(RESPONSE_REPLACE, replace_sensitivity); set_response_sensitive(RESPONSE_REPLACE_ALL, replace_sensitivity); } gobby-0.5.0/code/dialogs/document-location-dialog.cpp0000644000175000017500000001742012370427450017470 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/document-location-dialog.hpp" #include "util/i18n.hpp" #include "util/gtk-compat.hpp" #include Gobby::DocumentLocationDialog::DocumentLocationDialog(Gtk::Window& parent, InfGtkBrowserModel* m): Gtk::Dialog("", parent), m_box(false, 6), m_name_box(false, 6), m_name_label(_("Document Name:"), GtkCompat::ALIGN_RIGHT), m_location_label("", GtkCompat::ALIGN_LEFT), m_filter_model(inf_gtk_browser_model_filter_new(m)), m_view(INF_GTK_BROWSER_VIEW(inf_gtk_browser_view_new_with_model( INF_GTK_BROWSER_MODEL(m_filter_model)))) { // Default is single document mode: set_single_document_mode(); m_name_label.show(); m_name_entry.show(); m_name_entry.set_activates_default(true); m_location_label.show(); gtk_widget_show(GTK_WIDGET(m_view)); gtk_container_add(GTK_CONTAINER(m_scroll.gobj()), GTK_WIDGET(m_view)); m_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); m_scroll.set_shadow_type(Gtk::SHADOW_IN); m_scroll.show(); m_name_box.pack_start(m_name_label, Gtk::PACK_SHRINK); m_name_box.pack_start(m_name_entry, Gtk::PACK_EXPAND_WIDGET); m_name_box.show(); m_box.pack_start(m_name_box, Gtk::PACK_SHRINK); m_box.pack_start(m_location_label, Gtk::PACK_SHRINK); m_box.pack_start(m_scroll, Gtk::PACK_EXPAND_WIDGET); m_box.show(); g_signal_connect(m_view, "selection-changed", G_CALLBACK(on_selection_changed_static), this); g_signal_connect(m_filter_model, "row-changed", G_CALLBACK(on_row_changed_static), this); // Hide non-subdirectories: gtk_tree_model_filter_set_visible_func( GTK_TREE_MODEL_FILTER(m_filter_model), filter_visible_func_static, this, NULL); // Required to filter initial content: gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(m_filter_model)); get_vbox()->pack_start(m_box, Gtk::PACK_EXPAND_WIDGET); add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT); set_response_sensitive(Gtk::RESPONSE_ACCEPT, false); set_default_response(Gtk::RESPONSE_ACCEPT); set_default_size(-1, 480); set_border_width(12); } Gobby::DocumentLocationDialog::~DocumentLocationDialog() { g_object_unref(m_filter_model); m_filter_model = NULL; } Glib::ustring Gobby::DocumentLocationDialog::get_document_name() const { return m_name_entry.get_text(); } void Gobby::DocumentLocationDialog::set_document_name( const Glib::ustring& document_name) { m_name_entry.set_text(document_name); } InfBrowser* Gobby::DocumentLocationDialog::get_selected_directory( InfBrowserIter* iter) const { GtkTreeIter tree_iter; if(inf_gtk_browser_view_get_selected(m_view, &tree_iter)) { InfGtkBrowserModelStatus status = INF_GTK_BROWSER_MODEL_CONNECTED; GtkTreeIter dummy_iter; if(!gtk_tree_model_iter_parent(GTK_TREE_MODEL(m_filter_model), &dummy_iter, &tree_iter)) { gtk_tree_model_get( GTK_TREE_MODEL(m_filter_model), &tree_iter, INF_GTK_BROWSER_MODEL_COL_STATUS, &status, -1); } if(status == INF_GTK_BROWSER_MODEL_CONNECTED) { InfBrowserIter* browser_iter; InfBrowser* browser; gtk_tree_model_get( GTK_TREE_MODEL(m_filter_model), &tree_iter, INF_GTK_BROWSER_MODEL_COL_BROWSER, &browser, INF_GTK_BROWSER_MODEL_COL_NODE, &browser_iter, -1); *iter = *browser_iter; inf_browser_iter_free(browser_iter); g_object_unref(browser); return browser; } else { return NULL; } } else { return NULL; } } InfGtkBrowserModel* Gobby::DocumentLocationDialog::get_browser_model() const { return INF_GTK_BROWSER_MODEL( gtk_tree_model_filter_get_model( GTK_TREE_MODEL_FILTER(m_filter_model))); } void Gobby::DocumentLocationDialog::set_single_document_mode() { set_title(_("Select document's target location")); m_location_label.set_text( _("Choose a directory to create the document into:")); m_name_box.show(); } void Gobby::DocumentLocationDialog::set_multiple_document_mode() { set_title(_("Select documents' target location")); m_location_label.set_text( _("Choose a directory to create the documents into:")); m_name_box.hide(); } void Gobby::DocumentLocationDialog::on_show() { Gtk::Dialog::on_show(); if (GtkCompat::is_visible(m_name_box)) { m_name_entry.select_region(0, m_name_entry.get_text_length()); m_name_entry.grab_focus(); } else { gtk_widget_grab_focus(GTK_WIDGET(m_view)); } } void Gobby::DocumentLocationDialog::on_selection_changed(GtkTreeIter* iter) { gboolean accept_sensitive = false; if(iter != NULL) { GtkTreeIter dummy_iter; if(gtk_tree_model_iter_parent(GTK_TREE_MODEL(m_filter_model), &dummy_iter, iter)) { // Child: Always OK accept_sensitive = true; } else { // Top-level node: Check status InfGtkBrowserModelStatus status; gtk_tree_model_get(GTK_TREE_MODEL(m_filter_model), iter, INF_GTK_BROWSER_MODEL_COL_STATUS, &status, -1); accept_sensitive = (status == INF_GTK_BROWSER_MODEL_CONNECTED); } } set_response_sensitive(Gtk::RESPONSE_ACCEPT, accept_sensitive); } void Gobby::DocumentLocationDialog::on_row_changed(GtkTreePath* path, GtkTreeIter* iter) { // If a toplevel entry is selected, and the status changed to // connected, then make the Accept button sensitive. On the other // hand, if status changed to something else, then // make it insensitive. GtkTreeIter sel_iter; if(inf_gtk_browser_view_get_selected(m_view, &sel_iter)) { // We cannot compare the iterators directly here, since // GtkTreeModelFilter seems to allow two iterators pointing to // the same row but having a different user_data3 field. We // therefore compare the paths instead. GtkTreePath* sel_path = gtk_tree_model_get_path( GTK_TREE_MODEL(m_filter_model), &sel_iter); if(gtk_tree_path_compare(path, sel_path) == 0) { GtkTreeIter dummy_iter; if(!gtk_tree_model_iter_parent( GTK_TREE_MODEL(m_filter_model), &dummy_iter, iter)) { InfGtkBrowserModelStatus s; gtk_tree_model_get( GTK_TREE_MODEL(m_filter_model), iter, INF_GTK_BROWSER_MODEL_COL_STATUS, &s, -1); set_response_sensitive( Gtk::RESPONSE_ACCEPT, s == INF_GTK_BROWSER_MODEL_CONNECTED ); } } gtk_tree_path_free(sel_path); } } bool Gobby::DocumentLocationDialog::filter_visible_func(GtkTreeModel* model, GtkTreeIter* iter) { GtkTreeIter dummy_iter; if(!gtk_tree_model_iter_parent(model, &dummy_iter, iter)) { return true; } else { InfBrowserIter* browser_iter; InfBrowser* browser; gtk_tree_model_get( model, iter, INF_GTK_BROWSER_MODEL_COL_BROWSER, &browser, INF_GTK_BROWSER_MODEL_COL_NODE, &browser_iter, -1); bool result = inf_browser_is_subdirectory(browser, browser_iter); inf_browser_iter_free(browser_iter); g_object_unref(browser); return result; } } gobby-0.5.0/code/dialogs/Makefile.am0000644000175000017500000000133612370042070014125 00000000000000noinst_LIBRARIES = libgobby-dialogs.a libgobby_dialogs_a_SOURCES = \ connection-dialog.cpp \ document-location-dialog.cpp \ entry-dialog.cpp \ find-dialog.cpp \ goto-dialog.cpp \ initial-dialog.cpp \ open-location-dialog.cpp \ password-dialog.cpp \ preferences-dialog.cpp noinst_HEADERS = \ connection-dialog.hpp \ document-location-dialog.hpp \ entry-dialog.hpp \ find-dialog.hpp \ goto-dialog.hpp \ initial-dialog.hpp \ open-location-dialog.hpp \ password-dialog.hpp \ preferences-dialog.hpp appicondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/gobby-0.5 AM_CPPFLAGS = $(gobby_CFLAGS) $(unique_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code gobby-0.5.0/code/dialogs/find-dialog.hpp0000644000175000017500000000753312370427450014775 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FINDDIALOG_HPP_ #define _GOBBY_FINDDIALOG_HPP_ #include "core/folder.hpp" #include "core/statusbar.hpp" #include "core/sessionview.hpp" #include #include #include #include #include #include namespace Gobby { class FindDialog: public Gtk::Dialog { public: typedef sigc::signal SignalFindTextChanged; typedef sigc::signal SignalReplaceTextChanged; FindDialog(Gtk::Window& parent, const Folder& folder, StatusBar& status_bar); ~FindDialog(); bool get_search_only() const; void set_search_only(bool search_only); Glib::ustring get_find_text() const; Glib::ustring get_replace_text() const; bool find_next(); bool find_previous(); SignalFindTextChanged signal_find_text_changed() const { return m_signal_find_text_changed; } SignalReplaceTextChanged signal_replace_text_changed() const { return m_signal_replace_text_changed; } protected: enum SearchDirection { SEARCH_FORWARD, SEARCH_BACKWARD }; virtual void on_show(); virtual void on_response(int id); void on_document_changed(SessionView* view); void on_active_user_changed(InfUser* user); void on_find_text_changed(); void on_replace_text_changed(); SearchDirection get_direction() const; bool find(); bool replace(); bool replace_all(); // Searches for an occurence with the provided options, selecting the // result, if any. bool find_and_select(const GtkTextIter* from, SearchDirection direction); // Searches for a occurence, beginning from from, and wrapping around // if the corresponding checkbutton is checked. bool find_wrap(const GtkTextIter* from, SearchDirection direction, GtkTextIter* match_start, GtkTextIter* match_end); // Searches for an occurence in the given range bool find_range(const GtkTextIter* from, const GtkTextIter* to, SearchDirection direction, GtkTextIter* match_start, GtkTextIter* match_end); // Searches for an occurence, ignoring whole word only option bool find_range_once(const GtkTextIter* from, const GtkTextIter* to, SearchDirection direction, GtkTextIter* match_start, GtkTextIter* match_end); const Folder& m_folder; StatusBar& m_status_bar; sigc::connection m_active_user_changed_connection; Gtk::VBox m_box_main; Gtk::Table m_table_entries; Gtk::Label m_label_find; Gtk::Label m_label_replace; Gtk::Entry m_entry_find; Gtk::Entry m_entry_replace; Gtk::CheckButton m_check_case; Gtk::CheckButton m_check_whole_word; Gtk::CheckButton m_check_backwards; Gtk::CheckButton m_check_wrap_around; Gtk::Button* m_button_replace; Gtk::Button* m_button_replace_all; SignalFindTextChanged m_signal_find_text_changed; SignalReplaceTextChanged m_signal_replace_text_changed; private: void update_sensitivity(); }; } #endif // _GOBBY_FINDDIALOG_HPP_ gobby-0.5.0/code/dialogs/preferences-dialog.hpp0000644000175000017500000003200412375656622016357 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_PREFERENCESDIALOG_HPP_ #define _GOBBY_PREFERENCESDIALOG_HPP_ #include "core/preferences.hpp" #include "core/filechooser.hpp" #include "core/certificatemanager.hpp" #include "core/credentialsgenerator.hpp" #include "core/huebutton.hpp" #include "util/groupframe.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Gobby { template class PreferencesComboBox: public Gtk::ComboBox { public: PreferencesComboBox(Preferences::Option& option): m_option(option), m_store(Gtk::ListStore::create(m_columns)) { set_model(m_store); Gtk::CellRendererText* renderer = Gtk::manage(new Gtk::CellRendererText); pack_start(*renderer, true); add_attribute(renderer->property_text(), m_columns.text); } void add(const Glib::ustring& text, const OptionType& value) { Gtk::TreeIter iter = m_store->append(); (*iter)[m_columns.text] = text; (*iter)[m_columns.value] = value; if(m_option == value) set_active(iter); } private: class Columns: public Gtk::TreeModelColumnRecord { public: Gtk::TreeModelColumn text; Gtk::TreeModelColumn value; Columns() { add(text); add(value); } }; virtual void on_changed() { Gtk::ComboBox::on_changed(); OptionType value = (*get_active())[m_columns.value]; if(m_option != value) m_option = value; } Preferences::Option& m_option; Columns m_columns; Glib::RefPtr m_store; }; class PreferencesDialog : public Gtk::Dialog { public: // An object which keeps two values in sync with each other, using // notification signals of both objects. template class DuplexConnection { public: template DuplexConnection(Sig1 sig1, Sig2 sig2) { m_conn1 = sig1.connect(sigc::mem_fun(*this, &DuplexConnection::changed1)); m_conn2 = sig2.connect(sigc::mem_fun(*this, &DuplexConnection::changed2)); } virtual ~DuplexConnection() { m_conn1.disconnect(); m_conn2.disconnect(); } void block() { m_conn1.block(); m_conn2.block(); } void unblock() { m_conn1.unblock(); m_conn2.unblock(); } private: void changed1() { m_conn2.block(); if(get2() != get1()) set2(get1()); m_conn2.unblock(); } void changed2() { m_conn1.block(); if(get1() != get2()) set1(get2()); m_conn1.unblock(); } protected: virtual Type get1() const = 0; virtual Type get2() const = 0; virtual void set1(const Type& t) = 0; virtual void set2(const Type& t) = 0; private: sigc::connection m_conn1; sigc::connection m_conn2; }; class FontConnection: public DuplexConnection { public: FontConnection( Gtk::FontButton& font_button, Preferences::Option& option) : DuplexConnection( font_button.signal_font_set(), option.signal_changed()), m_font_button(font_button), m_option(option) { } protected: virtual Pango::FontDescription get1() const { return Pango::FontDescription( m_font_button.get_font_name()); } virtual Pango::FontDescription get2() const { return m_option.get(); } virtual void set1(const Pango::FontDescription& val) { m_font_button.set_font_name(val.to_string()); } virtual void set2(const Pango::FontDescription& val) { m_option.set(val); } private: Gtk::FontButton& m_font_button; Preferences::Option& m_option; }; // Note that old GTK+ versions do not emit the file-set signal // of Gtk::FileChooserButton when a new entry is chosen from // the combo box, but only from the dialog. The bug was fixed // only in GTK+ 3.10.0. // // Therefore, we are using the selection-changed signal // instead. However, when the button is constructed, the // signal is emitted "too often" since it is first emitted // with the home folder of the current user, and then again // with what was specified when set_filename() is called // to set the initial name. In the case of the local documents // directory, this causes a significant overhead and running // sessions being closed once the preferences dialog is opened. // // To work around this, we ignore all signal emissions until // the first signal emission with the initially set value occurs. // Once we depend on GTK+ 3.10 or greater, the workaround // can be removed and we can switch to signal_file_set(). class PathConnection: public DuplexConnection { public: PathConnection(Gtk::FileChooser& file_chooser, Preferences::Option& option): DuplexConnection( file_chooser.signal_selection_changed(), option.signal_changed()), m_file_chooser(file_chooser), m_option(option), m_initial_value(option), m_seen_initial_value(file_chooser.get_filename() == m_initial_value) { } protected: virtual std::string get1() const { return m_file_chooser.get_filename(); } virtual std::string get2() const { if(m_seen_initial_value) return m_option.get(); else return ""; } virtual void set1(const std::string& val) { m_file_chooser.set_filename(val); } virtual void set2(const std::string& val) { if(!m_seen_initial_value) { if(val == m_initial_value) m_seen_initial_value = true; } else { m_option.set(val); } } private: Gtk::FileChooser& m_file_chooser; Preferences::Option& m_option; const std::string m_initial_value; bool m_seen_initial_value; }; template class ComboColumns: public Gtk::TreeModelColumnRecord { }; class Page: public Gtk::Frame { public: Page(); void add(Gtk::Widget& widget, bool expand); protected: Gtk::VBox m_box; }; class User: public Page { public: User(Gtk::Window& parent, Preferences& preferences); protected: void on_local_allow_connections_toggled(); void on_local_require_password_toggled(); void on_local_keep_documents_toggled(); GroupFrame m_group_settings; GroupFrame m_group_remote; GroupFrame m_group_local; Gtk::HBox m_box_user_name; Gtk::Label m_lbl_user_name; Gtk::Entry m_ent_user_name; Gtk::HBox m_box_user_color; Gtk::Label m_lbl_user_color; HueButton m_btn_user_color; Gtk::HBox m_box_user_alpha; Gtk::Label m_lbl_user_alpha; Gtk::HScale m_scl_user_alpha; Gtk::CheckButton m_btn_remote_show_cursors; Gtk::CheckButton m_btn_remote_show_selections; Gtk::CheckButton m_btn_remote_show_current_lines; Gtk::CheckButton m_btn_remote_show_cursor_positions; Gtk::CheckButton m_btn_local_allow_connections; Gtk::CheckButton m_btn_local_require_password; Gtk::Label m_lbl_local_password; Gtk::Entry m_ent_local_password; Gtk::HBox m_box_local_password; Gtk::Label m_lbl_local_port; Gtk::SpinButton m_ent_local_port; Gtk::HBox m_box_local_port; Gtk::VBox m_box_local_connections; Gtk::CheckButton m_btn_local_keep_documents; Gtk::Label m_lbl_local_documents_directory; Gtk::FileChooserButton m_btn_local_documents_directory; PathConnection m_conn_local_documents_directory; Gtk::HBox m_box_local_documents_directory; Glib::RefPtr m_size_group; }; class Editor: public Page { public: Editor(Preferences& preferences); protected: void on_autosave_enabled_toggled(); GroupFrame m_group_tab; GroupFrame m_group_indentation; GroupFrame m_group_homeend; GroupFrame m_group_saving; Gtk::HBox m_box_tab_width; Gtk::Label m_lbl_tab_width; Gtk::SpinButton m_ent_tab_width; Gtk::CheckButton m_btn_tab_spaces; Gtk::CheckButton m_btn_indentation_auto; Gtk::CheckButton m_btn_homeend_smart; Gtk::CheckButton m_btn_autosave_enabled; Gtk::HBox m_box_autosave_interval; Gtk::Label m_lbl_autosave_interval; Gtk::Label m_lbl_autosave_interval_suffix; Gtk::SpinButton m_ent_autosave_interval; }; class View: public Page { public: View(Preferences& preferences); void set(Preferences::View& view) const; protected: void on_wrap_text_toggled(); void on_margin_display_toggled(); GroupFrame m_group_wrap; GroupFrame m_group_linenum; GroupFrame m_group_curline; GroupFrame m_group_margin; GroupFrame m_group_bracket; GroupFrame m_group_spaces; Gtk::CheckButton m_btn_wrap_text; Gtk::CheckButton m_btn_wrap_words; Gtk::CheckButton m_btn_linenum_display; Gtk::CheckButton m_btn_curline_highlight; Gtk::CheckButton m_btn_margin_display; Gtk::HBox m_box_margin_pos; Gtk::Label m_lbl_margin_pos; Gtk::SpinButton m_ent_margin_pos; Gtk::CheckButton m_btn_bracket_highlight; PreferencesComboBox m_cmb_spaces_display; }; class Appearance: public Page { public: Appearance(Preferences& preferences); protected: class Columns: public Gtk::TreeModelColumnRecord { public: Gtk::TreeModelColumn scheme; Gtk::TreeModelColumn name; Gtk::TreeModelColumn description; Columns() { add(scheme); add(name); add(description); } }; void on_pref_font_changed(); void on_scheme_changed(Preferences& preferences); GroupFrame m_group_toolbar; GroupFrame m_group_font; GroupFrame m_group_scheme; PreferencesComboBox m_cmb_toolbar_style; Gtk::FontButton m_btn_font; FontConnection m_conn_font; Columns m_columns; Glib::RefPtr m_list; Gtk::TreeView m_tree; }; class Security: public Page { public: Security(Gtk::Window& parent, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager); protected: void set_file_error(Gtk::Label& label, const GError* error); void on_credentials_changed(); void on_auth_cert_toggled(); void on_create_key_clicked(); void on_create_cert_clicked(); void on_file_dialog_response_key(int response_id); void on_file_dialog_response_certificate(int response_id); void on_key_generated(const KeyGeneratorHandle* handle, gnutls_x509_privkey_t key, const GError* error, const std::string& filename); void on_cert_generated(const CertificateGeneratorHandle* hndl, gnutls_x509_crt_t cert, const GError* error, const std::string& filename); Preferences& m_preferences; FileChooser& m_file_chooser; Gtk::Window& m_parent; CertificateManager& m_cert_manager; GroupFrame m_group_trust_file; GroupFrame m_group_connection_policy; GroupFrame m_group_authentication; Gtk::FileChooserButton m_btn_path_trust_file; PathConnection m_conn_path_trust_file; Gtk::Label m_error_trust_file; PreferencesComboBox m_cmb_connection_policy; Gtk::RadioButton m_btn_auth_none; Gtk::RadioButton m_btn_auth_cert; Gtk::Label m_lbl_key_file; Gtk::FileChooserButton m_btn_key_file; PathConnection m_conn_path_key_file; Gtk::Button m_btn_key_file_create; Gtk::HBox m_box_key_file; Gtk::Label m_error_key_file; Gtk::Label m_lbl_cert_file; Gtk::FileChooserButton m_btn_cert_file; PathConnection m_conn_path_cert_file; Gtk::Button m_btn_cert_file_create; Gtk::HBox m_box_cert_file; Gtk::Label m_error_cert_file; Glib::RefPtr m_size_group; std::auto_ptr m_key_generator_handle; std::auto_ptr m_cert_generator_handle; std::auto_ptr m_file_dialog; }; PreferencesDialog(Gtk::Window& parent, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager); protected: virtual void on_response(int id); Preferences& m_preferences; Gtk::Notebook m_notebook; User m_page_user; Editor m_page_editor; View m_page_view; Appearance m_page_appearance; Security m_page_security; }; } #endif // _GOBBY_PREFERENCESDIALOG_HPP_ gobby-0.5.0/code/dialogs/entry-dialog.cpp0000644000175000017500000000410112370427450015175 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/entry-dialog.hpp" #include "util/gtk-compat.hpp" Gobby::EntryDialog::EntryDialog(Gtk::Window& parent, const Glib::ustring& title, const Glib::ustring& intro_text): Gtk::Dialog(title, parent), m_box(false, 6), m_intro_label(intro_text, GtkCompat::ALIGN_RIGHT, Gtk::ALIGN_CENTER, true) { m_intro_label.set_mnemonic_widget(m_entry); m_box.pack_start(m_intro_label, Gtk::PACK_EXPAND_WIDGET); m_intro_label.show(); m_entry.set_activates_default(true); m_box.pack_start(m_entry, Gtk::PACK_EXPAND_WIDGET); m_entry.show(); m_box.show(); get_vbox()->set_spacing(6); get_vbox()->pack_start(m_box, Gtk::PACK_EXPAND_WIDGET); set_resizable(false); set_border_width(12); } Glib::ustring Gobby::EntryDialog::get_text() const { return m_entry.get_text(); } void Gobby::EntryDialog::set_text(const Glib::ustring& text) { m_entry.set_text(text); } void Gobby::EntryDialog::on_show() { Gtk::Dialog::on_show(); // We can't do this in the constructor, because the buttons are added // by the caller after the widget has been constructed. set_default_response(Gtk::RESPONSE_ACCEPT); m_entry.select_region(0, m_entry.get_text().length()); m_entry.grab_focus(); } gobby-0.5.0/code/dialogs/initial-dialog.hpp0000644000175000017500000000572412370427450015506 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_INITIALDIALOG_HPP_ #define _GOBBY_INITIALDIALOG_HPP_ #include "core/certificatemanager.hpp" #include "core/statusbar.hpp" #include "core/preferences.hpp" #include "core/iconmanager.hpp" #include "core/huebutton.hpp" #include #include #include #include #include #include #include #include #include namespace Gobby { class InitialDialog : public Gtk::Dialog { public: InitialDialog(Gtk::Window& parent, StatusBar& status_bar, Preferences& preferences, CertificateManager& cert_manager, const IconManager& icon_manager); protected: virtual void on_response(int id); void on_remote_allow_connections_toggled(); void on_remote_require_password_toggled(); void on_remote_auth_external_toggled(); StatusBar& m_status_bar; Preferences& m_preferences; CertificateManager& m_cert_manager; Gtk::VBox m_topbox; Gtk::Label m_title; Gtk::Image m_image; Gtk::VBox m_vbox; Gtk::Label m_intro; Gtk::Label m_name_label; Gtk::Entry m_name_entry; Gtk::Label m_color_label; HueButton m_color_button; Gtk::Table m_user_table; Gtk::Label m_remote_label; Gtk::CheckButton m_remote_allow_connections; Gtk::CheckButton m_remote_require_password; Gtk::HBox m_remote_password_box; Gtk::Label m_remote_password_label; Gtk::Entry m_remote_password_entry; Gtk::Label m_remote_auth_label; Gtk::RadioButton m_remote_auth_none; Gtk::Label m_remote_auth_none_help; Gtk::RadioButton m_remote_auth_self; Gtk::Label m_remote_auth_self_help; Gtk::RadioButton m_remote_auth_external; Gtk::Label m_remote_auth_external_help; Gtk::Label m_remote_auth_external_keyfile_label; Gtk::FileChooserButton m_remote_auth_external_keyfile; Gtk::Label m_remote_auth_external_certfile_label; Gtk::FileChooserButton m_remote_auth_external_certfile; Gtk::Table m_remote_auth_external_table; Gtk::VBox m_remote_auth_box; Gtk::VBox m_remote_options_box; Gtk::VBox m_remote_box; Gtk::HBox m_main_box; }; } #endif // _GOBBY_INITIALDIALOG_HPP_ gobby-0.5.0/code/dialogs/goto-dialog.cpp0000644000175000017500000001006312370427450015010 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/goto-dialog.hpp" #include "util/i18n.hpp" #include "util/gtk-compat.hpp" #include #include #include Gobby::GotoDialog::GotoDialog(Gtk::Window& parent, const Folder& folder): Gtk::Dialog(_("Go to line"), parent), m_folder(folder), m_table(1, 2), m_label_line(_("Line _number:"), GtkCompat::ALIGN_LEFT, Gtk::ALIGN_CENTER, true), m_current_view(NULL) { m_label_line.set_mnemonic_widget(m_entry_line); m_label_line.show(); m_entry_line.set_increments(1, 10); m_entry_line.set_activates_default(true); m_entry_line.show(); m_table.attach(m_label_line, 0, 1, 0, 1, Gtk::FILL, Gtk::FILL); m_table.attach(m_entry_line, 1, 2, 0, 1, Gtk::EXPAND | Gtk::FILL, Gtk::SHRINK); m_table.set_spacings(12); m_table.show(); get_vbox()->pack_start(m_table, Gtk::PACK_EXPAND_WIDGET); add_button(Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE); Gtk::Button* button = add_button(_("Go To _Line"), Gtk::RESPONSE_ACCEPT); button->set_image(*Gtk::manage(new Gtk::Image( Gtk::Stock::JUMP_TO, Gtk::ICON_SIZE_BUTTON))); m_folder.signal_document_changed().connect( sigc::mem_fun(*this, &GotoDialog::on_document_changed)); set_default_response(Gtk::RESPONSE_ACCEPT); set_border_width(12); set_resizable(false); // For initial sensitivity: on_document_changed(m_folder.get_current_document()); } Gobby::GotoDialog::~GotoDialog() { on_document_changed(NULL); } void Gobby::GotoDialog::on_show() { Gtk::Dialog::on_show(); m_entry_line.grab_focus(); if(m_current_view != NULL) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); GtkTextIter cursor; gtk_text_buffer_get_iter_at_mark( buffer, &cursor, gtk_text_buffer_get_insert(buffer)); m_entry_line.set_value(gtk_text_iter_get_line(&cursor) + 1); m_entry_line.select_region( 0, m_entry_line.get_text().length()); } } void Gobby::GotoDialog::on_response(int id) { if(id == Gtk::RESPONSE_ACCEPT) { g_assert(m_current_view != NULL); int value = m_entry_line.get_value_as_int(); GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); GtkTextIter begin; gtk_text_buffer_get_iter_at_line(buffer, &begin, value - 1); m_current_view->set_selection(&begin, &begin); } else if(id == Gtk::RESPONSE_CLOSE) { hide(); } Gtk::Dialog::on_response(id); } void Gobby::GotoDialog::on_document_changed(SessionView* view) { if(m_current_view != NULL) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); g_signal_handler_disconnect(buffer, m_changed_handler); } m_current_view = dynamic_cast(view); set_response_sensitive(Gtk::RESPONSE_ACCEPT, m_current_view != NULL); m_entry_line.set_sensitive(m_current_view != NULL); if(m_current_view != NULL) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); m_changed_handler = g_signal_connect_after( G_OBJECT(buffer), "changed", G_CALLBACK(on_changed_static), this); on_changed(); } } void Gobby::GotoDialog::on_changed() { g_assert(m_current_view != NULL); GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); m_entry_line.set_range(1, gtk_text_buffer_get_line_count(buffer)); } gobby-0.5.0/code/dialogs/open-location-dialog.cpp0000644000175000017500000000522212370427450016610 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/open-location-dialog.hpp" #include "util/file.hpp" #include "util/i18n.hpp" #include "util/gtk-compat.hpp" #include "features.hpp" Gobby::OpenLocationDialog::OpenLocationDialog(Gtk::Window& parent): Gtk::Dialog(_("Open Location"), parent), m_box(false, 6), m_label(_("Enter the _location (URI) of the file you would " "like to open:"), GtkCompat::ALIGN_LEFT, Gtk::ALIGN_CENTER, true), m_combo(config_filename("recent_uris"), 8) { m_label.set_mnemonic_widget(m_combo); m_box.pack_start(m_label, Gtk::PACK_SHRINK); m_label.show(); m_combo.get_entry()->set_activates_default(true); m_box.pack_start(m_combo, Gtk::PACK_SHRINK); m_combo.show(); m_combo.get_entry()->signal_changed().connect( sigc::mem_fun(*this, &OpenLocationDialog::on_entry_changed)); m_box.show(); get_vbox()->set_spacing(6); get_vbox()->pack_start(m_box, Gtk::PACK_EXPAND_WIDGET); set_resizable(false); set_border_width(12); } Glib::ustring Gobby::OpenLocationDialog::get_uri() const { return m_combo.get_entry()->get_text(); } void Gobby::OpenLocationDialog::set_uri(const Glib::ustring& uri) { m_combo.get_entry()->set_text(uri); } void Gobby::OpenLocationDialog::on_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) m_combo.commit(); Gtk::Dialog::on_response(response_id); } void Gobby::OpenLocationDialog::on_show() { Gtk::Dialog::on_show(); // We can't do this in the constructor, because the buttons are added // by the caller after the widget has been constructed. set_default_response(Gtk::RESPONSE_ACCEPT); on_entry_changed(); m_combo.get_entry()->select_region( 0, m_combo.get_entry()->get_text().length()); m_combo.grab_focus(); } void Gobby::OpenLocationDialog::on_entry_changed() { set_response_sensitive( Gtk::RESPONSE_ACCEPT, !m_combo.get_entry()->get_text().empty()); } gobby-0.5.0/code/dialogs/document-location-dialog.hpp0000644000175000017500000000600712370427450017474 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_DOCUMENTLOCATIONDIALOG_HPP_ #define _GOBBY_DOCUMENTLOCATIONDIALOG_HPP_ #include #include #include #include #include #include #include #include namespace Gobby { class DocumentLocationDialog : public Gtk::Dialog { public: DocumentLocationDialog(Gtk::Window& parent, InfGtkBrowserModel* model); ~DocumentLocationDialog(); Glib::ustring get_document_name() const; void set_document_name(const Glib::ustring& document_name); InfBrowser* get_selected_directory(InfBrowserIter* iter) const; InfGtkBrowserModel* get_browser_model() const; void set_single_document_mode(); void set_multiple_document_mode(); protected: virtual void on_show(); static void on_selection_changed_static(InfGtkBrowserView* view, GtkTreeIter* iter, gpointer user_data) { static_cast( user_data)->on_selection_changed(iter); } static void on_row_changed_static(GtkTreeModel* model, GtkTreePath* path, GtkTreeIter* iter, gpointer user_data) { static_cast( user_data)->on_row_changed(path, iter); } static gboolean filter_visible_func_static(GtkTreeModel* model, GtkTreeIter* iter, gpointer user_data) { return static_cast( user_data)->filter_visible_func(model, iter); } void on_selection_changed(GtkTreeIter* iter); void on_row_changed(GtkTreePath* path, GtkTreeIter* iter); bool filter_visible_func(GtkTreeModel* model, GtkTreeIter* iter); Gtk::VBox m_box; Gtk::HBox m_name_box; Gtk::Label m_name_label; Gtk::Entry m_name_entry; Gtk::Label m_location_label; InfGtkBrowserModelFilter* m_filter_model; Gtk::ScrolledWindow m_scroll; InfGtkBrowserView* m_view; }; } #endif // _GOBBY_DOCUMENTLOCATIONDIALOG_HPP_ gobby-0.5.0/code/dialogs/initial-dialog.cpp0000644000175000017500000003700212370427450015473 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/initial-dialog.hpp" #include "core/credentialsgenerator.hpp" #include "util/color.hpp" #include "util/file.hpp" #include "util/i18n.hpp" #include "util/gtk-compat.hpp" #include "features.hpp" #include #include #include namespace { Gtk::Widget* align_top(Gtk::Widget& widget) { Gtk::Alignment* alignment = new Gtk::Alignment(Gtk::ALIGN_CENTER, Gobby::GtkCompat::ALIGN_TOP, 1.0, 0.0); alignment->add(widget); alignment->show(); return Gtk::manage(alignment); } Gtk::Widget* indent(Gtk::Widget& widget) { Gtk::Alignment* alignment = new Gtk::Alignment; alignment->set_padding(0, 0, 12, 0); alignment->add(widget); alignment->show(); return Gtk::manage(alignment); } class InitialCertGenerator { public: InitialCertGenerator(Gobby::CertificateManager& cert_manager, Gobby::StatusBar& status_bar, const std::string& key_filename, const std::string& cert_filename): m_cert_manager(cert_manager), m_status_bar(status_bar), m_key_filename(key_filename), m_cert_filename(cert_filename), m_key(NULL), m_status_handle(m_status_bar.invalid_handle()) { m_key_handle = Gobby::create_key( GNUTLS_PK_RSA, 2048, sigc::mem_fun( *this, &InitialCertGenerator:: on_key_generated)); m_status_handle = m_status_bar.add_info_message( Gobby::_("Generating 2048-bit " "RSA private key...")); } ~InitialCertGenerator() { if(m_key != NULL) gnutls_x509_privkey_deinit(m_key); if(m_status_handle != m_status_bar.invalid_handle()) m_status_bar.remove_message(m_status_handle); } private: void on_key_generated(const Gobby::KeyGeneratorHandle* handle, gnutls_x509_privkey_t key, const GError* error) { m_key_handle.reset(NULL); m_key = key; if(error != NULL) { m_status_bar.add_error_message( Gobby::_("Failed to generate " "private key"), Glib::ustring::compose( Gobby::_("%1\n\nYou can try " "again to create a " "key in the " "Security tab of " "the preferences " "dialog."), error->message)); m_cert_manager.set_private_key( NULL, m_key_filename.c_str(), error); done(); return; } m_crt_handle = Gobby::create_self_signed_certificate( m_key, sigc::mem_fun( *this, &InitialCertGenerator:: on_cert_generated)); } void on_cert_generated( const Gobby::CertificateGeneratorHandle* hndl, gnutls_x509_crt_t cert, const GError* error) { m_status_bar.remove_message(m_status_handle); m_status_handle = m_status_bar.invalid_handle(); m_crt_handle.reset(NULL); m_cert_manager.set_private_key( m_key, m_key_filename.c_str(), NULL); m_key = NULL; if(error != NULL) { m_status_bar.add_error_message( Gobby::_("Failed to generate " "self-signed certificate"), Glib::ustring::compose( Gobby::_("%1\n\nYou can try " "again to create a " "certificate in the " "Security tab of " "the preferences " "dialog."), error->message)); } else { // Note this needs to be allocated with // g_malloc, since it is directly passed and // freed by libinfinity gnutls_x509_crt_t* crt_array = static_cast( g_malloc(sizeof( gnutls_x509_crt_t))); crt_array[0] = cert; m_cert_manager.set_certificates( crt_array, 1, m_cert_filename.c_str(), NULL); } done(); } void done() { delete this; } Gobby::CertificateManager& m_cert_manager; Gobby::StatusBar& m_status_bar; const std::string m_key_filename; const std::string m_cert_filename; gnutls_x509_privkey_t m_key; std::auto_ptr m_key_handle; std::auto_ptr m_crt_handle; Gobby::StatusBar::MessageHandle m_status_handle; }; } Gobby::InitialDialog::InitialDialog(Gtk::Window& parent, StatusBar& status_bar, Preferences& preferences, CertificateManager& cert_manager, const IconManager& icon_manager): Gtk::Dialog("Gobby", parent), m_status_bar(status_bar), m_preferences(preferences), m_cert_manager(cert_manager), m_vbox(false, 12), m_color_button(_("Choose a user color"), *this), m_user_table(3, 2), m_remote_auth_external_table(2, 2) { m_title.set_markup( "" + Glib::Markup::escape_text(_("Welcome to Gobby")) + ""); m_title.show(); Gtk::IconSize::register_new("welcome", 128, 128); m_image.set_from_icon_name("gobby-0.5", Gtk::IconSize::from_name("welcome")); m_image.set_alignment(Gtk::ALIGN_CENTER, GtkCompat::ALIGN_TOP); m_image.show(); m_intro.set_text( _("Before we start, a few options need to be configured. " "You can later change them by choosing Edit ▸ Preferences " "from the menu.")); m_intro.set_width_chars(50); m_intro.set_line_wrap(true); m_intro.show(); m_name_label.set_markup( "" + Glib::Markup::escape_text(_("User Name")) + "" "\n\n" + Glib::Markup::escape_text(_("Your name as shown to " "other users.")) + ""); m_name_label.set_alignment(GtkCompat::ALIGN_LEFT); m_name_label.set_line_wrap(true); m_name_label.set_width_chars(20); m_name_label.show(); m_color_label.set_markup( "" + Glib::Markup::escape_text(_("User Color")) + "" "\n\n" + Glib::Markup::escape_text(_("The color with which text you " "have written is branded.")) + ""); m_color_label.set_alignment(GtkCompat::ALIGN_LEFT); m_color_label.set_line_wrap(true); m_color_label.set_width_chars(20); m_color_label.show(); m_name_entry.set_text(preferences.user.name); m_name_entry.set_activates_default(true); m_name_entry.show(); m_color_button.set_hue(preferences.user.hue); m_color_button.set_saturation(0.35); m_color_button.set_value(1.0); m_color_button.show(); m_remote_label.set_markup( "" + Glib::Markup::escape_text(_("Remote Connections")) + ""); m_remote_label.set_alignment(GtkCompat::ALIGN_LEFT); m_remote_label.show(); m_remote_allow_connections.set_label( _("Allow remote users to edit local documents")); m_remote_allow_connections.set_active( preferences.user.allow_remote_access); m_remote_allow_connections.show(); m_remote_require_password.set_label( _("Ask remote users for a password")); m_remote_require_password.set_active( preferences.user.require_password); m_remote_require_password.show(); m_remote_password_label.set_label(_("Password:")); m_remote_password_label.show(); m_remote_password_entry.set_visibility(false); m_remote_password_entry.set_text( static_cast(preferences.user.password)); m_remote_password_entry.show(); m_remote_password_box.set_spacing(12); m_remote_password_box.pack_start( m_remote_password_label, Gtk::PACK_SHRINK); m_remote_password_box.pack_start( m_remote_password_entry, Gtk::PACK_EXPAND_WIDGET); m_remote_password_box.set_sensitive( preferences.user.require_password); m_remote_password_box.show(); m_remote_auth_label.set_markup( "" + Glib::Markup::escape_text("Authentication") + ""); m_remote_auth_label.set_alignment(GtkCompat::ALIGN_LEFT); m_remote_auth_label.show(); Gtk::RadioButton::Group group; m_remote_auth_none.set_label( _("No authentication (Not recommended)")); m_remote_auth_none.set_group(group); m_remote_auth_none.show(); m_remote_auth_none_help.set_markup( "" + Glib::Markup::escape_text( _("Don't authenticate ourselves to remote users. " "Data transfer will be unencrypted.")) + ""); m_remote_auth_none_help.set_line_wrap(true); m_remote_auth_none_help.set_width_chars(30); m_remote_auth_none_help.set_alignment(GtkCompat::ALIGN_LEFT); m_remote_auth_none_help.show(); m_remote_auth_self.set_label( _("Create a self-signed certificate (Recommended)")); m_remote_auth_self.set_group(group); m_remote_auth_self.set_active(true); m_remote_auth_self.show(); m_remote_auth_self_help.set_markup( "" + Glib::Markup::escape_text( _("It may take a minute or two until remote users " "can connect while the security certificate is " "being generated.")) + ""); m_remote_auth_self_help.set_line_wrap(true); m_remote_auth_self_help.set_width_chars(30); m_remote_auth_self_help.set_alignment(GtkCompat::ALIGN_LEFT); m_remote_auth_self_help.show(); m_remote_auth_external.set_label( _("Use an existing certificate (Expert option)")); m_remote_auth_external.set_group(group); m_remote_auth_external.show(); m_remote_auth_external_help.set_markup( "" + Glib::Markup::escape_text( _("Use an existing private key and certificate for " "authentication. The files must be in PEM " "format.")) + ""); m_remote_auth_external_help.set_line_wrap(true); m_remote_auth_external_help.set_width_chars(30); m_remote_auth_external_help.set_alignment(GtkCompat::ALIGN_LEFT); m_remote_auth_external_help.show(); m_remote_auth_external_keyfile_label.set_label(_("Private key:")); m_remote_auth_external_keyfile_label.show(); m_remote_auth_external_certfile_label.set_label(_("Certificate:")); m_remote_auth_external_certfile_label.show(); m_remote_auth_external_keyfile.show(); m_remote_auth_external_certfile.show(); m_remote_auth_external_table.set_spacings(6); m_remote_auth_external_table.attach( m_remote_auth_external_keyfile_label, 0, 1, 0, 1, Gtk::FILL | Gtk::SHRINK, Gtk::FILL | Gtk::SHRINK); m_remote_auth_external_table.attach( m_remote_auth_external_keyfile, 1, 2, 0, 1, Gtk::FILL | Gtk::EXPAND, Gtk::FILL | Gtk::SHRINK); m_remote_auth_external_table.attach( m_remote_auth_external_certfile_label, 0, 1, 1, 2, Gtk::FILL | Gtk::SHRINK, Gtk::FILL | Gtk::SHRINK); m_remote_auth_external_table.attach( m_remote_auth_external_certfile, 1, 2, 1, 2, Gtk::FILL | Gtk::EXPAND, Gtk::FILL | Gtk::SHRINK); m_remote_auth_external_table.set_sensitive(false); m_remote_auth_external_table.show(); m_remote_auth_box.set_spacing(6); m_remote_auth_box.pack_start( m_remote_auth_none, Gtk::PACK_SHRINK); m_remote_auth_box.pack_start( *indent(m_remote_auth_none_help), Gtk::PACK_SHRINK); m_remote_auth_box.pack_start( m_remote_auth_self, Gtk::PACK_SHRINK); m_remote_auth_box.pack_start( *indent(m_remote_auth_self_help), Gtk::PACK_SHRINK); m_remote_auth_box.pack_start( m_remote_auth_external, Gtk::PACK_SHRINK); m_remote_auth_box.pack_start( *indent(m_remote_auth_external_help), Gtk::PACK_SHRINK); m_remote_auth_box.pack_start( *indent(m_remote_auth_external_table), Gtk::PACK_SHRINK); m_remote_auth_box.show(); m_remote_options_box.set_spacing(6); m_remote_options_box.pack_start( m_remote_require_password, Gtk::PACK_SHRINK); m_remote_options_box.pack_start( *indent(m_remote_password_box), Gtk::PACK_SHRINK); m_remote_options_box.pack_start( m_remote_auth_label, Gtk::PACK_SHRINK); m_remote_options_box.pack_start( *indent(m_remote_auth_box), Gtk::PACK_SHRINK); m_remote_options_box.set_sensitive( preferences.user.allow_remote_access); m_remote_options_box.show(); m_remote_box.pack_start(m_remote_label, Gtk::PACK_SHRINK); m_remote_box.pack_start(m_remote_allow_connections, Gtk::PACK_SHRINK); m_remote_box.pack_start(*indent(m_remote_options_box), Gtk::PACK_SHRINK); m_remote_box.show(); m_user_table.set_row_spacings(12); m_user_table.attach(m_image, 0, 2, 0, 1, Gtk::FILL | Gtk::SHRINK, Gtk::FILL | Gtk::SHRINK); m_user_table.attach(m_name_label, 0, 1, 1, 2, Gtk::FILL | Gtk::SHRINK, Gtk::FILL | Gtk::SHRINK); m_user_table.attach(*align_top(m_name_entry), 1, 2, 1, 2, Gtk::FILL | Gtk::EXPAND, Gtk::FILL | Gtk::SHRINK); m_user_table.attach(m_color_label, 0, 1, 2, 3, Gtk::FILL | Gtk::SHRINK, Gtk::FILL | Gtk::SHRINK); m_user_table.attach(*align_top(m_color_button), 1, 2, 2, 3, Gtk::FILL | Gtk::EXPAND, Gtk::FILL | Gtk::SHRINK); m_user_table.show(); m_main_box.set_spacing(24); m_main_box.pack_start(m_user_table, Gtk::PACK_SHRINK); m_main_box.pack_start(m_remote_box, Gtk::PACK_SHRINK); m_main_box.show(); m_vbox.set_spacing(24); m_vbox.pack_start(m_intro, Gtk::PACK_SHRINK); m_vbox.pack_start(m_main_box, Gtk::PACK_EXPAND_WIDGET); m_vbox.show(); m_topbox.pack_start(m_title, Gtk::PACK_SHRINK); m_topbox.pack_start(m_vbox, Gtk::PACK_EXPAND_WIDGET); m_topbox.set_spacing(24); m_topbox.set_border_width(12); m_topbox.show(); m_remote_allow_connections.signal_toggled().connect( sigc::mem_fun(*this, &Gobby::InitialDialog:: on_remote_allow_connections_toggled)); m_remote_require_password.signal_toggled().connect( sigc::mem_fun(*this, &Gobby::InitialDialog:: on_remote_require_password_toggled)); m_remote_auth_external.signal_toggled().connect( sigc::mem_fun(*this, &Gobby::InitialDialog:: on_remote_auth_external_toggled)); get_vbox()->pack_start(m_topbox, Gtk::PACK_EXPAND_WIDGET); set_resizable(false); add_button(Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE); } void Gobby::InitialDialog::on_response(int id) { m_preferences.user.name = m_name_entry.get_text(); m_preferences.user.hue = hue_from_gdk_color(m_color_button.get_color()); m_preferences.user.allow_remote_access = m_remote_allow_connections.get_active(); m_preferences.user.require_password = m_remote_require_password.get_active(); m_preferences.user.password = m_remote_password_entry.get_text(); m_preferences.security.authentication_enabled = !m_remote_auth_none.get_active(); if(m_remote_auth_self.get_active()) { // The certificate generator takes care of its own: new InitialCertGenerator( m_cert_manager, m_status_bar, config_filename("key.pem"), config_filename("cert.pem")); } else { m_preferences.security.certificate_file = m_remote_auth_external_certfile.get_filename(); m_preferences.security.key_file = m_remote_auth_external_keyfile.get_filename(); } hide(); } void Gobby::InitialDialog::on_remote_allow_connections_toggled() { m_remote_options_box.set_sensitive( m_remote_allow_connections.get_active()); } void Gobby::InitialDialog::on_remote_require_password_toggled() { m_remote_password_box.set_sensitive( m_remote_require_password.get_active()); } void Gobby::InitialDialog::on_remote_auth_external_toggled() { m_remote_auth_external_table.set_sensitive( m_remote_auth_external.get_active()); } gobby-0.5.0/code/operations/0000755000175000017500000000000012376162132012717 500000000000000gobby-0.5.0/code/operations/operation-delete.hpp0000644000175000017500000000341312370427450016612 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATIONDELETE_HPP_ #define _GOBBY_OPERATIONS_OPERATIONDELETE_HPP_ #include "operations/operations.hpp" namespace Gobby { class OperationDelete: public Operations::Operation { public: OperationDelete(Operations& operations, InfBrowser* browser, const InfBrowserIter* iter); virtual ~OperationDelete(); virtual void start(); protected: static void on_request_finished_static(InfRequest* request, const InfRequestResult* result, const GError* error, gpointer user_data) { static_cast(user_data)-> on_request_finished(error); } void on_request_finished(const GError* error); protected: InfBrowser* m_browser; const InfBrowserIter m_iter; const Glib::ustring m_name; InfRequest* m_request; StatusBar::MessageHandle m_message_handle; }; } #endif // _GOBBY_OPERATIONS_OPERATIONDELETE_HPP_ gobby-0.5.0/code/operations/operation-new.hpp0000644000175000017500000000401212370427450016135 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATIONNEW_HPP_ #define _GOBBY_OPERATIONS_OPERATIONNEW_HPP_ #include "operations/operations.hpp" #include namespace Gobby { class OperationNew: public Operations::Operation { public: OperationNew(Operations& operations, InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name, bool directory); virtual ~OperationNew(); virtual void start(); protected: static void on_request_finished_static(InfRequest* request, const InfRequestResult* result, const GError* error, gpointer user_data) { const InfBrowserIter* iter; inf_request_result_get_add_node(result, NULL, NULL, &iter); static_cast(user_data)-> on_request_finished(iter, error); } void on_request_finished(const InfBrowserIter* iter, const GError* error); protected: InfBrowser* m_browser; const InfBrowserIter m_parent; Glib::ustring m_name; bool m_directory; InfRequest* m_request; StatusBar::MessageHandle m_message_handle; }; } #endif // _GOBBY_OPERATIONS_OPERATIONNEW_HPP_ gobby-0.5.0/code/operations/operation-open-multiple.cpp0000644000175000017500000001162212370427450020136 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ // TODO: Show "Querying file name(s)..." in statusbar when querying file // names without actually opening a file because of waiting for the file name. #include "operations/operation-open-multiple.hpp" #include "operations/operation-open.hpp" #include "util/i18n.hpp" Gobby::OperationOpenMultiple::OperationOpenMultiple( Operations& operations, const Preferences& prefs, InfBrowser* browser, const InfBrowserIter* parent, const uri_list& uris): Operation(operations), m_preferences(prefs), m_parent(browser, parent), m_current(NULL) { m_parent.signal_node_removed().connect( sigc::mem_fun(*this, &OperationOpenMultiple::on_node_removed)); for(uri_list::const_iterator iter = uris.begin(); iter != uris.end(); ++iter) { info_list::iterator info_iter = m_infos.insert(m_infos.end(), Info()); Info& info = *info_iter; info.uri = *iter; info.encoding = NULL; /* auto-detect... */ } } void Gobby::OperationOpenMultiple::start() { for(info_list::iterator iter = m_infos.begin(); iter != m_infos.end(); ++iter) { query(iter); } } void Gobby::OperationOpenMultiple::query(const info_list::iterator& info) { Glib::RefPtr file = Gio::File::create_for_uri(info->uri); if(info->name.empty()) { try { // Query file name file->query_info_async( sigc::bind( sigc::mem_fun( *this, &OperationOpenMultiple:: on_query_info), file, info), G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME); } catch(const Gio::Error& ex) { single_error(info, ex.what()); } } else { if(!m_current) load_info(info); } } void Gobby::OperationOpenMultiple::on_node_removed() { fatal_error(_("Parent folder was removed")); } void Gobby::OperationOpenMultiple::on_query_info( const Glib::RefPtr& result, const Glib::RefPtr& file, const info_list::iterator& info) { try { Glib::RefPtr file_info = file->query_info_finish(result); info->name = file_info->get_display_name(); if(!m_current) load_info(info); } catch(const Gio::Error& ex) { single_error(info, ex.what()); } } void Gobby::OperationOpenMultiple::on_finished( bool success, const info_list::iterator& info) { m_infos.erase(info); m_current = NULL; if(m_infos.empty()) { // All documents loaded finish(); } else { // Find the next info with name set for(info_list::iterator iter = m_infos.begin(); iter != m_infos.end(); ++iter) { if(!iter->name.empty()) { load_info(iter); break; } } // If no info was found, then wait for names to become // available, by query info results } } void Gobby::OperationOpenMultiple::load_info(const info_list::iterator& iter) { g_assert(m_current == NULL); g_assert(!iter->name.empty()); m_current = m_operations.create_document( m_parent.get_browser(), m_parent.get_browser_iter(), iter->name, m_preferences, iter->uri, iter->encoding); // TODO: In principle this could be NULL if the whole operation // finished synchrounously. In this case with the current API we // cannot find out whether the operation was successful or not. What // we do does not depend on whether the operation is successful, // so it does not matter at this point. But in principle we should // change the API so that we can find it out here. Note also that // currently, OperationOpen can never finish synchrounously. if(m_current == NULL) { on_finished(true, iter); } else { m_current->signal_finished().connect( sigc::bind( sigc::mem_fun( *this, &OperationOpenMultiple::on_finished), iter)); } } void Gobby::OperationOpenMultiple::single_error( const info_list::iterator& iter, const Glib::ustring& message) { get_status_bar().add_error_message( Glib::ustring::compose( _("Failed to open document \"%1\""), iter->uri), message); m_infos.erase(iter); // Finish operation if there are no more URIs to load if(m_infos.empty()) finish(); } void Gobby::OperationOpenMultiple::fatal_error(const Glib::ustring& message) { get_status_bar().add_error_message( _("Failed to open multiple documents"), message); fail(); } gobby-0.5.0/code/operations/Makefile.in0000644000175000017500000004202012376162111014677 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = code/operations DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ libgobby_operations_a_AR = $(AR) $(ARFLAGS) libgobby_operations_a_LIBADD = am_libgobby_operations_a_OBJECTS = operations.$(OBJEXT) \ operation-delete.$(OBJEXT) operation-export-html.$(OBJEXT) \ operation-new.$(OBJEXT) operation-open.$(OBJEXT) \ operation-open-multiple.$(OBJEXT) operation-save.$(OBJEXT) \ operation-subscribe-path.$(OBJEXT) libgobby_operations_a_OBJECTS = $(am_libgobby_operations_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/code depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgobby_operations_a_SOURCES) DIST_SOURCES = $(libgobby_operations_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ noinst_LIBRARIES = libgobby-operations.a libgobby_operations_a_SOURCES = \ operations.cpp \ operation-delete.cpp \ operation-export-html.cpp \ operation-new.cpp \ operation-open.cpp \ operation-open-multiple.cpp \ operation-save.cpp \ operation-subscribe-path.cpp noinst_HEADERS = \ operations.hpp \ operation-delete.hpp \ operation-export-html.hpp \ operation-new.hpp \ operation-open.hpp \ operation-open-multiple.hpp \ operation-save.hpp \ operation-subscribe-path.hpp appicondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/gobby-0.5 AM_CPPFLAGS = $(gobby_CFLAGS) $(unique_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(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) --foreign code/operations/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign code/operations/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(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) libgobby-operations.a: $(libgobby_operations_a_OBJECTS) $(libgobby_operations_a_DEPENDENCIES) $(EXTRA_libgobby_operations_a_DEPENDENCIES) $(AM_V_at)-rm -f libgobby-operations.a $(AM_V_AR)$(libgobby_operations_a_AR) libgobby-operations.a $(libgobby_operations_a_OBJECTS) $(libgobby_operations_a_LIBADD) $(AM_V_at)$(RANLIB) libgobby-operations.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/operation-delete.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/operation-export-html.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/operation-new.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/operation-open-multiple.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/operation-open.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/operation-save.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/operation-subscribe-path.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/operations.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` 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) $(HEADERS) 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-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 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-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic 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: gobby-0.5.0/code/operations/operation-subscribe-path.hpp0000644000175000017500000000660212375143302020262 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATIONSUBSCRIBEPATH_HPP_ #define _GOBBY_OPERATIONS_OPERATIONSUBSCRIBEPATH_HPP_ #include "operations/operations.hpp" #include "core/browser.hpp" #include namespace Gobby { class OperationSubscribePath: public Operations::Operation { public: OperationSubscribePath(Operations& operations, const std::string& uri); OperationSubscribePath(Operations& operations, InfBrowser* browser, const std::string& path); virtual ~OperationSubscribePath(); virtual void start(); private: void start_without_browser(); void start_with_browser(); void explore(); void descend(); void make_explore_request(); void make_subscribe_request(); static void on_notify_status_static(GObject* object, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)-> on_notify_status(); } static void on_browser_deleted_static(gpointer user_data, GObject* where_the_object_was) { static_cast(user_data)-> on_browser_deleted(); } static void on_explore_finished_static(InfRequest* request, const InfRequestResult* result, const GError* error, gpointer user_data) { static_cast(user_data)-> on_explore_finished(error); } static void on_subscribe_finished_static(InfRequest* request, const InfRequestResult* res, const GError* error, gpointer user_data) { const InfBrowserIter* iter; if(error == NULL) { inf_request_result_get_subscribe_session( res, NULL, &iter, NULL); } static_cast(user_data)-> on_subscribe_finished(iter, error); } void on_notify_status(); void on_browser_deleted(); void on_explore_finished(const GError* error); void on_subscribe_finished(const InfBrowserIter* iter, const GError* error); InfBrowser* m_browser; std::string m_target; std::vector m_path; std::vector::size_type m_path_index; InfBrowserIter m_path_iter; InfRequest* m_request; gulong m_notify_status_id; StatusBar::MessageHandle m_message_handle; }; } #endif // _GOBBY_OPERATIONS_OPERATIONSUBSCRIBEPATH_HPP_ gobby-0.5.0/code/operations/operation-delete.cpp0000644000175000017500000000444512370427450016613 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "operations/operation-delete.hpp" #include "util/i18n.hpp" Gobby::OperationDelete::OperationDelete(Operations& operations, InfBrowser* browser, const InfBrowserIter* iter): Operation(operations), m_browser(browser), m_iter(*iter), m_name(inf_browser_get_node_name(browser, iter)), m_request(NULL) { g_object_ref(browser); } Gobby::OperationDelete::~OperationDelete() { if(m_request != NULL) { g_signal_handlers_disconnect_by_func( G_OBJECT(m_request), (gpointer)G_CALLBACK(on_request_finished_static), this); g_object_unref(m_request); get_status_bar().remove_message(m_message_handle); } g_object_unref(m_browser); } void Gobby::OperationDelete::start() { InfRequest* request = inf_browser_remove_node( m_browser, &m_iter, on_request_finished_static, this ); // Object might be gone at this point, so check stack variable if(request != NULL) { m_request = request; // Note infc_browser_remove_node does not return a // new reference. g_object_ref(m_request); m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Removing node \"%1\"..."), m_name)); } } void Gobby::OperationDelete::on_request_finished(const GError* error) { if(error) { get_status_bar().add_error_message( Glib::ustring::compose( _("Failed to delete node \"%1\""), m_name), error->message); fail(); } else { finish(); } } gobby-0.5.0/code/operations/operation-open.cpp0000644000175000017500000003131012370704570016302 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "operations/operation-open.hpp" #include "core/noteplugin.hpp" #include "util/i18n.hpp" #include #include #include #include #include // memmove. Is there some C++ replacement for this? namespace { // These are the charsets that we try to convert a file from when // autodetecting the encoding. const char* get_autodetect_encoding(unsigned int index) { // Translators: This is the 8 bit encoding that is tried when // autodetecting a file's encoding. static const char* DEFAULT_8BIT_ENCODING = N_("ISO-8859-1"); static const char* ENCODINGS[] = { "UTF-8", DEFAULT_8BIT_ENCODING, "UTF-16", "UCS-2", "UCS-4" }; static const unsigned int N_ENCODINGS = sizeof(ENCODINGS)/sizeof(ENCODINGS[0]); if(index == 1) return Gobby::_(ENCODINGS[index]); if(index < N_ENCODINGS) return ENCODINGS[index]; return NULL; } } Gobby::OperationOpen::OperationOpen(Operations& operations, const Preferences& preferences, InfBrowser* browser, const InfBrowserIter* parent, const std::string& name, const std::string& uri, const char* encoding): Operation(operations), m_preferences(preferences), m_name(name), m_uri(uri), m_parent(browser, parent), m_encoding_auto_detect_index(-1), m_eol_style(DocumentInfoStorage::EOL_CR), m_request(NULL), m_raw_pos(0), m_content(NULL), m_message_handle(get_status_bar().invalid_handle()) { if(encoding != NULL) { m_encoding = encoding; } else { m_encoding_auto_detect_index = 0; m_encoding = get_autodetect_encoding(0); } } Gobby::OperationOpen::~OperationOpen() { // TODO: Cancel outstanding async operations? if(m_request != NULL) { g_signal_handlers_disconnect_by_func( G_OBJECT(m_request), (gpointer)G_CALLBACK(on_request_finished_static), this); g_object_unref(m_request); } if(m_content != NULL) g_object_unref(m_content); if(m_message_handle != get_status_bar().invalid_handle()) get_status_bar().remove_message(m_message_handle); } void Gobby::OperationOpen::start() { m_iconv.reset(new Glib::IConv("UTF-8", m_encoding)); try { m_file = Gio::File::create_for_uri(m_uri); m_file->read_async(sigc::mem_fun( *this, &OperationOpen::on_file_read)); m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Opening document \"%1\"..."), m_uri)); m_parent.signal_node_removed().connect( sigc::mem_fun( *this, &OperationOpen::on_node_removed)); m_content = GTK_TEXT_BUFFER(gtk_source_buffer_new(NULL)); // Disable GtkSourceView's Undo by beginning a not undoable // action lasting forever. We have our own (local group) Undo. gtk_source_buffer_begin_not_undoable_action( GTK_SOURCE_BUFFER(m_content)); } catch(const Gio::Error& err) { error(err.what()); } } void Gobby::OperationOpen::on_node_removed() { error(_("The directory into which the new document " "was supposed to be inserted has been removed")); } void Gobby::OperationOpen::on_file_read( const Glib::RefPtr& result) { try { m_stream = m_file->read_finish(result); m_buffer.reset(new buffer); m_stream->read_async( m_buffer->buf, buffer::SIZE, sigc::mem_fun(*this, &OperationOpen::on_stream_read)); } catch(const Glib::Exception& ex) { error(ex.what()); } } void Gobby::OperationOpen::on_stream_read( const Glib::RefPtr& result) { try { gssize size = m_stream->read_finish(result); // Close stream after reading, this signals the idle handler // that all data has been read from the file. if(size <= 0) { m_stream->close(); m_stream.reset(); m_buffer.reset(NULL); // If the idle handler is not connected, then we have // already processed all the data. if(!m_idle_connection.connected()) read_finish(); } else { m_raw_content.insert(m_raw_content.end(), m_buffer->buf, m_buffer->buf + size); // Process read data in an idle handler if(!m_idle_connection.connected()) { m_idle_connection = Glib::signal_idle().connect( sigc::mem_fun(*this, &OperationOpen:: on_idle)); } m_stream->read_async( m_buffer->buf, buffer::SIZE, sigc::mem_fun( *this, &OperationOpen::on_stream_read)); } } catch(const Glib::Exception& ex) { error(ex.what()); } } bool Gobby::OperationOpen::on_idle() { static const unsigned int CONVERT_BUFFER_SIZE = 1024; const char* inbuffer = &m_raw_content[m_raw_pos]; char* inbuf = const_cast(inbuffer); gsize inbytes = m_raw_content.size() - m_raw_pos; char outbuffer[CONVERT_BUFFER_SIZE]; gchar* outbuf = outbuffer; gsize outbytes = CONVERT_BUFFER_SIZE; /* iconv is defined as libiconv on Windows, or at least when using the * binary packages from ftp.gnome.org. Therefore we can't propely * call Glib::IConv::iconv. Therefore, we use the C API here. */ const std::size_t result = g_iconv(m_iconv->gobj(), &inbuf, &inbytes, &outbuf, &outbytes); bool more_to_process = (inbytes != 0); if(result == static_cast(-1)) { if(errno == EILSEQ) { // Invalid text for the current encoding encoding_error(); return false; } if(errno == EINVAL) { // If EINVAL is set, this means that an incomplete // multibyte sequence was at the end of the input. // We might have some more bytes, but those do not // make up a whole character, so we need to wait for // more input. if(!m_stream) { // However, if we already read all input, then // there is no more input to come. We // consider this an error since the file // should not end with an incomplete multibyte // sequence. encoding_error(); return false; } else { // Otherwise, we need to wait for more data // to process. more_to_process = false; } } } m_raw_pos += (inbuf - inbuffer); // We now have outbuf - outbuffer bytes of valid UTF-8 in outbuffer. char* prev = outbuffer; char* pos; const char to_find[] = { '\r', '\n', '\0' }; /* TODO: Write directly into the buffer here, * instead of memmoving stuff. */ while( (pos = std::find_first_of(prev, outbuf, to_find, to_find + sizeof(to_find))) != outbuf) { if(*pos == '\0') { // There is a nullbyte in the conversion. As normal // text files don't contain nullbytes, this only // occurs when converting for example a UTF-16 from // ISO-8859-1 to UTF-8 (note that the UTF-16 file is // valid ISO-8859-1, it just contains lots of // nullbytes). We therefore produce an error here. encoding_error(); return false; } else { // We convert everything to '\n' as line separator, // but remember the current eol-style to correctly // save the document back to disk. prev = pos + 1; if(*pos == '\r' && prev != outbuf && *prev == '\n') { // CRLF style line break std::memmove(prev, prev + 1, outbuf - prev - 1); m_eol_style = DocumentInfoStorage::EOL_CRLF; --outbuf; } else if(*pos == '\r') { *pos = '\n'; m_eol_style = DocumentInfoStorage::EOL_CR; } else { m_eol_style = DocumentInfoStorage::EOL_LF; } } } GtkTextIter insert_iter; gtk_text_buffer_get_end_iter(m_content, &insert_iter); gtk_text_buffer_insert(m_content, &insert_iter, outbuffer, outbuf - outbuffer); // Done reading and converting the whole file if(!more_to_process && !m_stream) read_finish(); return more_to_process; } void Gobby::OperationOpen::encoding_error() { if(m_encoding_auto_detect_index == -1) { error(_("The file contains data not in the " "specified encoding")); } else { ++ m_encoding_auto_detect_index; const char* next_encoding = get_autodetect_encoding( m_encoding_auto_detect_index); if(next_encoding == NULL) { error(_("The file either contains data in an unknown " "encoding, or it contains binary data.")); } else { // Delete current content: GtkTextIter start_iter, end_iter; gtk_text_buffer_get_start_iter(m_content, &start_iter); gtk_text_buffer_get_end_iter(m_content, &end_iter); gtk_text_buffer_delete(m_content, &start_iter, &end_iter); m_raw_pos = 0; m_encoding = next_encoding; m_iconv.reset(new Glib::IConv("UTf-8", m_encoding)); // Read again, try with next encoding. m_idle_connection = Glib::signal_idle().connect( sigc::mem_fun(*this, &OperationOpen::on_idle)); } } } void Gobby::OperationOpen::read_finish() { // If the last character is a newline character, remove it. GtkTextIter end_iter, test_iter; gtk_text_buffer_get_end_iter(m_content, &end_iter); test_iter = end_iter; if(gtk_text_iter_backward_char(&test_iter)) { if(gtk_text_iter_get_char(&test_iter) == '\n') { gtk_text_buffer_delete( m_content, &test_iter, &end_iter); } } gtk_text_buffer_set_modified(m_content, FALSE); GtkTextIter insert_iter; GtkTextMark* insert = gtk_text_buffer_get_insert(m_content); gtk_text_buffer_get_iter_at_mark(m_content, &insert_iter, insert); InfUser* user = INF_USER(g_object_new( INF_TEXT_TYPE_USER, "id", 1, "flags", INF_USER_LOCAL, "name", m_preferences.user.name.get().c_str(), /* The user is made active when the user * switches to the document. */ "status", INF_USER_INACTIVE, "hue", m_preferences.user.hue.get(), "caret-position", gtk_text_iter_get_offset(&insert_iter), static_cast(NULL))); InfUserTable* user_table = inf_user_table_new(); inf_user_table_add_user(user_table, user); g_object_unref(user); InfTextGtkBuffer* text_gtk_buffer = inf_text_gtk_buffer_new(m_content, user_table); g_object_unref(user_table); ConnectionManager& connection_manager = get_browser().get_connection_manager(); InfCommunicationManager* communication_manager = connection_manager.get_communication_manager(); InfBrowser* browser = m_parent.get_browser(); InfIo* io; g_object_get(G_OBJECT(browser), "io", &io, NULL); InfTextSession* session = inf_text_session_new_with_user_table( communication_manager, INF_TEXT_BUFFER(text_gtk_buffer), io, user_table, INF_SESSION_RUNNING, NULL, NULL); g_object_unref(io); g_object_unref(text_gtk_buffer); InfRequest* request = inf_browser_add_note( m_parent.get_browser(), m_parent.get_browser_iter(), m_name.c_str(), "InfText", NULL, INF_SESSION(session), TRUE, on_request_finished_static, this); g_object_unref(session); if(request != NULL) { m_request = request; g_object_ref(m_request); // TODO: We can remove the node watch here, but need to have // the browser available in on_request_finished then. Maybe // just disconnect the signal, or bind it. } } void Gobby::OperationOpen::on_request_finished(const InfBrowserIter* iter, const GError* error) { if(error != NULL) { OperationOpen::error(error->message); } else { // Store document info so that we know where we loaded the // file from, so we don't have to ask the user where to store // it when s/he wants to save it again. DocumentInfoStorage::Info info; info.uri = m_file->get_uri(); info.encoding = m_encoding; info.eol_style = m_eol_style; get_info_storage().set_info( m_parent.get_browser(), iter, info); InfSessionProxy* proxy = inf_browser_get_session(m_parent.get_browser(), iter); g_assert(proxy != NULL); get_folder_manager().add_document( m_parent.get_browser(), iter, proxy, NULL); finish(); } } void Gobby::OperationOpen::error(const Glib::ustring& message) { get_status_bar().add_error_message( Glib::ustring::compose( _("Failed to open document \"%1\""), m_file->get_uri()), message); fail(); } gobby-0.5.0/code/operations/operation-save.hpp0000644000175000017500000000530712370427450016312 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATION_SAVE_HPP_ #define _GOBBY_OPERATIONS_OPERATION_SAVE_HPP_ #include "operations/operations.hpp" #include "core/documentinfostorage.hpp" #include #include #include #include namespace Gobby { class OperationSave: public Operations::Operation, public sigc::trackable { public: // TODO: This should maybe just take a text buffer to save, not a // textsessionview. OperationSave(Operations& operations, TextSessionView& view, const std::string& uri, const std::string& encoding, DocumentInfoStorage::EolStyle eol_style); virtual ~OperationSave(); virtual void start(); // Note these can return NULL in case the view has been closed // in the meanwhile. TextSessionView* get_view() { return m_view; } const TextSessionView* get_view() const { return m_view; } std::time_t get_start_time() const { return m_start_time; } protected: void on_document_removed(SessionView& view); void on_file_replace(const Glib::RefPtr& result); void on_stream_write(const Glib::RefPtr& result); void attempt_next(); void write_next(); void error(const Glib::ustring& message); protected: const std::string m_uri; TextSessionView* m_view; std::time_t m_start_time; typedef std::pair Line; std::list m_lines; std::list::iterator m_current_line; std::size_t m_current_line_index; std::string m_encoding; DocumentInfoStorage::EolStyle m_eol_style; std::string m_storage_key; Glib::IConv m_iconv; static const std::size_t BUFFER_SIZE = 1024; char m_buffer[BUFFER_SIZE]; std::size_t m_buffer_size; std::size_t m_buffer_index; Glib::RefPtr m_file; Glib::RefPtr m_stream; StatusBar::MessageHandle m_message_handle; }; } #endif // _GOBBY_OPERATIONS_OPERATION_SAVE_HPP_ gobby-0.5.0/code/operations/operations.cpp0000644000175000017500000001402412370427450015530 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "operations/operation-new.hpp" #include "operations/operation-open.hpp" #include "operations/operation-open-multiple.hpp" #include "operations/operation-save.hpp" #include "operations/operation-delete.hpp" #include "operations/operation-subscribe-path.hpp" #include "operations/operation-export-html.hpp" #include "operations/operations.hpp" #include "core/noteplugin.hpp" #include "util/i18n.hpp" Gobby::Operations::Operation::~Operation() {} Gobby::Operations::Operations(DocumentInfoStorage& info_storage, Browser& browser, FolderManager& folder_manager, StatusBar& status_bar): m_info_storage(info_storage), m_browser(browser), m_folder_manager(folder_manager), m_status_bar(status_bar) { } Gobby::Operations::~Operations() { for(OperationSet::iterator iter = m_operations.begin(); iter != m_operations.end(); ++ iter) { delete *iter; } } Gobby::OperationNew* Gobby::Operations::create_directory(InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name) { OperationNew* op = new OperationNew(*this, browser, parent, name, true); m_operations.insert(op); op->start(); return check_operation(op); } Gobby::OperationNew* Gobby::Operations::create_document(InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name) { OperationNew* op = new OperationNew(*this, browser, parent, name, false); m_operations.insert(op); op->start(); return check_operation(op); } Gobby::OperationOpen* Gobby::Operations::create_document(InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name, const Preferences& preferences, const Glib::ustring& from_uri, const char* encoding) { OperationOpen* op = new OperationOpen(*this, preferences, browser, parent, name, from_uri, encoding); m_operations.insert(op); op->start(); return check_operation(op); } Gobby::OperationOpenMultiple* Gobby::Operations::create_documents(InfBrowser* browser, const InfBrowserIter* parent, const Preferences& prefs, const uri_list& uris) { OperationOpenMultiple* op = new OperationOpenMultiple(*this, prefs, browser, parent, uris); m_operations.insert(op); op->start(); return check_operation(op); } Gobby::OperationSave* Gobby::Operations::save_document(TextSessionView& view, const std::string& uri, const std::string& encoding, DocumentInfoStorage::EolStyle eol_style) { OperationSave* prev_op = get_save_operation_for_document(view); // Cancel previous save operation: if(prev_op != NULL) fail_operation(prev_op); OperationSave* op = new OperationSave(*this, view, uri, encoding, eol_style); m_operations.insert(op); m_signal_begin_save_operation.emit(op); op->start(); return check_operation(op); } Gobby::OperationDelete* Gobby::Operations::delete_node(InfBrowser* browser, const InfBrowserIter* iter) { OperationDelete* op = new OperationDelete(*this, browser, iter); m_operations.insert(op); op->start(); return check_operation(op); } Gobby::OperationSubscribePath* Gobby::Operations::subscribe_path(const std::string& uri) { OperationSubscribePath* op = new OperationSubscribePath(*this, uri); m_operations.insert(op); op->start(); return check_operation(op); } Gobby::OperationSubscribePath* Gobby::Operations::subscribe_path(InfBrowser* browser, const std::string& path) { OperationSubscribePath* op = new OperationSubscribePath(*this, browser, path); m_operations.insert(op); op->start(); return check_operation(op); } Gobby::OperationExportHtml* Gobby::Operations::export_html(TextSessionView& view, const std::string& uri) { OperationExportHtml* op = new OperationExportHtml(*this, view, uri); m_operations.insert(op); op->start(); return op; } Gobby::OperationSave* Gobby::Operations::get_save_operation_for_document(TextSessionView& view) { for(OperationSet::iterator iter = m_operations.begin(); iter != m_operations.end(); ++ iter) { Operation* op = *iter; OperationSave* save_op = dynamic_cast(op); if(save_op != NULL) { if(save_op->get_view() == &view) return save_op; } } return NULL; } void Gobby::Operations::finish_operation(Operation* operation) { m_operations.erase(operation); operation->signal_finished().emit(true); delete operation; } void Gobby::Operations::fail_operation(Operation* operation) { m_operations.erase(operation); operation->signal_finished().emit(false); delete operation; } gobby-0.5.0/code/operations/operation-export-html.hpp0000644000175000017500000000354112370427450017635 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATION_EXPORT_HTML_HPP_ #define _GOBBY_OPERATIONS_OPERATION_EXPORT_HTML_HPP_ #include "operations/operations.hpp" #include "core/documentinfostorage.hpp" #include #include #include namespace Gobby { class OperationExportHtml: public Operations::Operation, public sigc::trackable { public: OperationExportHtml(Operations& operations, TextSessionView& view, const std::string& uri); virtual ~OperationExportHtml(); virtual void start(); protected: void on_file_replace(const Glib::RefPtr& result); void on_stream_write(const Glib::RefPtr& result); void error(const Glib::ustring& message); protected: const std::string m_title; const std::string m_uri; const std::string m_xml; std::string::size_type m_index; Glib::RefPtr m_file; Glib::RefPtr m_stream; StatusBar::MessageHandle m_message_handle; }; } #endif // _GOBBY_OPERATIONS_OPERATION_EXPORT_HTML_HPP_ gobby-0.5.0/code/operations/operations.hpp0000644000175000017500000001164112370427450015537 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATIONS_HPP_ #define _GOBBY_OPERATIONS_OPERATIONS_HPP_ #include "core/browser.hpp" #include "core/statusbar.hpp" #include "core/documentinfostorage.hpp" #include "core/foldermanager.hpp" #include "core/textsessionview.hpp" #include #include #include #include namespace Gobby { class OperationNew; class OperationOpen; class OperationOpenMultiple; class OperationSave; class OperationDelete; class OperationSubscribePath; class OperationExportHtml; class Operations: public sigc::trackable { public: class Operation { public: typedef sigc::signal SignalFinished; Operation(Operations& operations): m_operations(operations) {} virtual ~Operation() = 0; virtual void start() = 0; StatusBar& get_status_bar() { return m_operations.m_status_bar; } Browser& get_browser() { return m_operations.m_browser; } FolderManager& get_folder_manager() { return m_operations.m_folder_manager; } DocumentInfoStorage& get_info_storage() { return m_operations.m_info_storage; } SignalFinished signal_finished() const { return m_signal_finished; } protected: void fail() { m_operations.fail_operation(this); } void finish() { m_operations.finish_operation(this); } Operations& m_operations; private: SignalFinished m_signal_finished; }; typedef sigc::signal SignalBeginSaveOperation; typedef std::vector uri_list; Operations(DocumentInfoStorage& info_storage, Browser& browser, FolderManager& folder_manager, StatusBar& status_bar); ~Operations(); OperationNew* create_directory(InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name); OperationNew* create_document(InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name); OperationOpen* create_document(InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name, const Preferences& preferences, const Glib::ustring& from_uri, const char* encoding); OperationOpenMultiple* create_documents(InfBrowser* browser, const InfBrowserIter* parent, const Preferences& prefs, const uri_list& uris); OperationSave* save_document(TextSessionView& view, const std::string& uri, const std::string& encoding, DocumentInfoStorage::EolStyle eol_style); OperationDelete* delete_node(InfBrowser* browser, const InfBrowserIter* iter); // uri must be of kind infinote://[hostname]/[path] OperationSubscribePath* subscribe_path(const std::string& uri); OperationSubscribePath* subscribe_path(InfBrowser* browser, const std::string& path); OperationExportHtml* export_html(TextSessionView& view, const std::string& uri); OperationSave* get_save_operation_for_document(TextSessionView& view); SignalBeginSaveOperation signal_begin_save_operation() const { return m_signal_begin_save_operation; } protected: void fail_operation(Operation* operation); void finish_operation(Operation* operation); DocumentInfoStorage& m_info_storage; Browser& m_browser; FolderManager& m_folder_manager; StatusBar& m_status_bar; typedef std::set OperationSet; OperationSet m_operations; SignalBeginSaveOperation m_signal_begin_save_operation; private: template OperationType* check_operation(OperationType* op) { if(m_operations.find(op) == m_operations.end()) return NULL; return op; } }; } #endif // _GOBBY_OPERATIONS_OPERATIONS_HPP_ gobby-0.5.0/code/operations/operation-export-html.cpp0000644000175000017500000004461412370427450017636 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ // Include this first because some of the other headers include X11.h which, // among others, #defines "None". #include #include "operations/operation-export-html.hpp" #include "util/i18n.hpp" #include #include #include #include #include #include #include #include namespace { char const gobby_icon[] = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB9gMEQwLEOi12dIAAAvuSURBVGje7Zl/cFTXdcc/b997u/t2V9Ki30hCEBAGgw3IEGPiH+MQGzshdpO4hcSJcezG+eEJdiF4HNdpaNJmOm7tIW7dpiWexh2Pm4KTVrELFv4RG8e4EyaG8MMFYSQLIfQDSfv713vv3nf7xy5CgMBIns44M5yZN3vvvrv7zvecc7/nnvPgklySS/IHLdrFLJozZ862WbNmhfP5fEBKqSulFIBSStm27Yxda5qmCAQCDiiKqyCbzVqe540+y/M8T9O0stqaWr19R/uisb9fDKYGV+gw1Az9z4O8kG7GxQBobW2d+vTTT7cK4QJQURFFKTV6lcCUxkXFT4/Hn+/7/T62b9tOMBB8pu2Ftq+eelZlyP/mvAUfaw0GzMTRroGeT55M3/W6bXecTzffxbqqUChg2/ZZyjI6h1NAOGs8/lxKyYaHNlBXV7tm9erVPwBYBNGli65sPDmY9EL1U+oarpj+8TkLpr362ZqKRz40gFAohGVZZ3x3JgjGAXHK+mfOi2EkUUqx6clNmqEb31+zZs2DU0P+9UsWzJvWWl9r7vvN/6Z9SnlXLprZ1DKzfu1iqJh0CJXiGM+T+P1+crkcsVjsvJ4YL2T8fj9VVZWj923bwfO8Iogfb+LuNXdvarls9nErYFKWixvXRwNlb+/tzMS7BrR8QVSaun4rUm6ZDAB/PB4P9vT00NjYMK71zw2TC1sfFMpTDJ8cRnoCx3b54oqbNXf3G82J7i6UUhi6xtLqcGTEkfRkcyPKJ4+Nt50vxEJlwH/5NO06TSPg8/nw+XzMnXs5L7W3U1tbi5SS/v7+D7T+2fO6ulpeefkVuru7kZ6H49ic2P4if3LdEt5/42Vcx0UqRUJ4OJ7HO73xX76Uc/54IiHkB+Kahs9TSkOB9CQg2bd/P42NjSSTSQKBwOSsr+CWW29BKUU2m2Okv4/X9/+OdF8P0nVRgKsUtlQci+eOpXLOAxOl0acAXUNDoc65qZRi1apVvPjiCzQ0NNDV1cXAwMAYRU9b+7TSiunTZ1BXV3sW/Xr8atMTLGmqo3/3LjzAQ5GTCqUkQ9nC9l3QNxEAUeA+AE+p88ZXe3s7x4/30tTUSGNjI+Xl5WdY+OywOTWOxWKjRgiFQgjXRc8kEX4XJ5tBKRCewvYUnSO5w5m8+/BEE9mnAeZPDyGkIpUVOELheQpdA7+ukbI9MgWPLVu2sH79egqFPENDJ8coejYrje+Z+vo63tq6hZaqChLvH8YrriArFa6QIpG3/30XpCcK4JMAf/2VaXz8YyFiCZvB4QL5rIOlQ01Ep3PI5Y5/6aOtrY0VK1ZcgE7PVdzvN5k9u2V0feeuN1naVE33yHDR+krhKsXR4cxBuyD+5oMocjwAMwAWNgYRtiCsK5ordETAoHPIZeObFstuXsVzzzTyzt4D/OL5/+C+r3+TYNC6KBAAQgg0TaPrwH6mhvzEOo9wKpdnhSJdELm44zz5BojJAAgBaEIghUQ6EukIfrUvR+0t63hq/fXU1ZSDUnz+thsYOJniz7+7jm8/8BC6bpxH8bFMVbzX3NzMqz/dTGtVlGOH96AAobyi9Ucy+35dkM9cTIIdD0APcK2wXTzXQ7qSPccKTP/cI6z89A2ELKt4AtEUhubSVF/OM5v/joe//xTfuv/+szbwmSxkmv5RFkonEvgLGdInBlBecW1GegymC6mUEI9e7AlhvLPQd6KWL+vmBcIWKE/xXGc9n7rxGkJWCLQg+EqXFgCfju04zG2pwTBMLCuIZQUJBq3SZ4BAIEAwGCQQ8I+G0Us/3cysmijJ3mMl6yuEp+hK5A/sLIjXLxbAeB7oD5i+ff1x5xNHT7p847lBnv3XtVRWVXOoo5NoRTmapoOmoaTAFQ7JZJoVN9/Atu3bWLBg4Rl0ejqcVIl56qmvr2f40EHqgh7SKSaujJQcz3nqPdt+bCIFzXgAIrG8vnfjf8euWb044ps31c/Sq1t5/j+3UzjwE37fVcD2Qhg+HVNmqQnkeWV/mi07XmNkeIjp05vHVfzUZ1VVFb97eQfN5RaJ9w4Ws66ncKVi2CqX78uhY5MGoOv6581AaPOia28N+zTb9+qRtxjJSmqqKnn33cOsX1rJbUtObWyJsMOIgp+hmEM6nSGZjJFOp8ehz6LymqZRVVXF7ue3sKjCoC+bLjKP9IgFowRa5jkc6WRSAAJW2WPR6tpvfuEb3ysvn1KL69pkD9WR73gWTfeRy9lIV+AJD0/I0UtJj5AJjuPgOC6pVPq8zKOU4n927iSqQ/L9TpQqnnny0qP5xhsZTqbURGtiAyAYijzaOPPy+//ovkciuk9HCBelFPUtS/jhj+bjieI5VjoST3qj7FQE4/HekCQQDFJbW0Nz87QL0ufWf/sZ88oCDHaMoICc8IiHq/nq+u+wZ+NGJgNgVtAKP/SZu9ZFlJS4QhQf5kn60i6RCgkaRCIW0hF4UhUVd4uekMKjMxFA13XePdRBX1/fuAc5pRTCdRFDA+RFCoXCUYq0hPmfuY2AZaEmbH/wVVbXfHvx8s+Vg8J1HYTrIFwb4Tro/jAjGZvuY73Mn3cZ299JFr3glpKc67GvJ0/M9giHQuzZcwDQME0T0zQwDAPDMEtzkwM72mmJhkkP9KEU5KQiU9nADV/68qinJuwBTdNXN82ap7nO6YIdpVDKwy7k2P3mS4hkF48+vJYV//AkVcEsCxpMpOvR0Vfgr3Y7LLx1Mf39A2ScJMeP97Bs2TI0TTuncxE79C4NWhalFLZSJDwf1999L4ZpTsr6AD4pZblhBnAdG9exEa6N69ok40PsenEzn12znG2//g3hcIiFdyzn74+Uc+ezce76eZy/2KdRf89CWiLT+NFj/0h0VZQHvvcgO3bsQNd1IpHI6OXXfSR7O0n19qBQ5KVCNMzk6pUrS7WxNzkPoKEJxy4Wl6pUP3mSd157jns23kllYyX3/O2fcucPHqHluhYic5eTKWRI2SkyToZUIcUL7k6CC4MEQ0HMr5hsfPwvqampYenSpZimCUA6MUTDnGb2vr2XyyJ+hvDzhYe+C0A8nhhT3U3QA4mRodDJE11FD7g2wrHpPbKbK2+aA1NgMD1IQiRovr6ZpEgSy8VIFBKkCilShRRpO014Rhg9pBdziaUTujnET372z3R1dY2GZXKoj/lXzaVp2eW8VZDIqXXMuuqqYgUVrZh0a9G46aabtu597RfLM7lceW3DDBWtbfJnkp3anFU30JfqQ3oSV7rY0qbgFsi7eXJujpyToyAK4/6p1WzRsbODZDKJ67oYhkH6ZB/xdI6MBl9+eC1X337vaB0dDofG6XJcJICVK1f+2cqVK5eOjIxcc+TIkXmxWKxpyE4vHBEjPi/tjQJwpIMtbGxhn1fxsSL9EsdxyOfzlJWV8fZbb+CzU9yxdiNTZ10xppunSCbThMOhyQFYt25dP9AGtD3++OPVpmlee/CfDv68P9VveaoIQHgC4YmJxablI5FI4DgOSin0yhl8cc29hCJl57QaLSuApmmT3MRjZMOGDcNPPPHEnvRIWhvuHSZQM7mNJbKC5PEkhmHi8xVP7Pd86wE6OjpIpVKYph9d92FZFpZlEY1GPwQLnSWVlZVDt6+4/Ze/3fbbTwymBquNKYYebApaRr2h6ZaOHtTRreKGlXmJLEi8goeX9GBQIYYl1RVVfP1L91FZWVnqpyp8Ph+zZ8/m6NGjJBKJYiLL5XBdB9eVBAIBstmsBlgf+v3A1q1b9b6+vhal1JUnTpxY1N3d/WAwEoyksilSmRSZTAZN0wiHwkTCEcrDZUytbWDG9Bk0NTURDAYIhcJUVFRgmsY5jd9CIc/w8DDxeAIpBUIIbNumvX2H29bW9jXgMJAC4sAIF6iNLyrwZs6c+V5ra+sUv9/vMwxDMwxDA6UphXJdVwkhlJRSua6rHMf2zmylM24P9dQax3F8tl3QfD5N7+09EejuPvY1oPvs3jKQKIFJTxhASeqB8P/j2yIdqAaqgNiFtthY72h8NCUMTC2BMc7jxgygfVQBjI2QypL3K0pzCRRKII9/1AGc8f4QqAOCJRDJDwi1S3JJLskfgvwfcPxaSBSG+m4AAAAASUVORK5CYII="; // Sort tags so that CSS declaration order corresponds to priority struct TagComparator { bool operator()(GtkTextTag* first, GtkTextTag* second) const { return gtk_text_tag_get_priority(first) < gtk_text_tag_get_priority(second); } }; typedef std::set priority_tag_set; // We don't use Glib::ustring::compose for now because // it's formatting support does not compile properly under // Windows. See https://bugzilla.gnome.org/show_bug.cgi?id=599340 Glib::ustring uprintf(gchar const* fmt, ...) { va_list args; va_start(args, fmt); gchar* str = g_strdup_vprintf(fmt, args); va_end(args); Glib::ustring result; try { result = str; } catch (...) { g_free(str); throw; } g_free(str); return result; } unsigned int color_to_rgb(GdkColor* color) { return ((color->red & 0xff00) << 8) | (color->green & 0xff00) | ((color->blue & 0xff00) >> 8); } Glib::ustring get_current_tags(priority_tag_set& tags, GtkTextIter* iter) { GSList* current_tags = gtk_text_iter_get_tags(iter); // make sure to free current_tags in an exception-safe manner: Glib::SListHandle > handle( current_tags, Glib::OWNERSHIP_SHALLOW); Glib::ustring classes; for(GSList* tag = current_tags; tag != 0; tag = tag->next) { if(!classes.empty()) classes += ' '; classes += uprintf( "tag_%p", static_cast(tag->data)); tags.insert(GTK_TEXT_TAG(tag->data)); } return classes; } // write the Gtk::TextBuffer from document into content, inserting // s for line breaks and authorship of chunks of text, also // save all users and tags encountered and the total number of // lines dumped void dump_buffer(Gobby::TextSessionView& view, xmlpp::Element* content, std::set& users, priority_tag_set& tags, unsigned int& line_counter) { using namespace Gobby; users.clear(); tags.clear(); line_counter = 1; xmlpp::Element* last_node = content; xmlpp::Element* line_no = last_node->add_child("span"); line_no->set_attribute("class", "line_no"); line_no->set_attribute("id", "line_1"); GtkTextBuffer* buffer = GTK_TEXT_BUFFER( view.get_text_buffer()); InfTextGtkBuffer* inf_buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer( INF_SESSION(view.get_session()))); GtkTextIter begin; gtk_text_buffer_get_start_iter(buffer, &begin); { GtkTextIter end; gtk_text_buffer_get_end_iter(buffer, &end); gtk_source_buffer_ensure_highlight( GTK_SOURCE_BUFFER(buffer), &begin, &end); } // iterate through chunks of text during which the currently // set tags do not change, write each as a while(!gtk_text_iter_is_end(&begin)) { // add current tags as classes for CSS formatting // (both for author of text and syntax highlighting) Glib::ustring classes = get_current_tags(tags, &begin); if(!classes.empty()) { last_node = last_node->add_child("span"); last_node->set_attribute("class", classes); // add mouseover "written by" popup // this only needs to happen when there are tags, // because the presence of an author implies a tag InfTextUser* user = inf_text_gtk_buffer_get_author( inf_buffer, &begin); if(user) { char const* user_name = inf_user_get_name( INF_USER(user)); last_node->set_attribute( "title", uprintf(_("written by: %s"), user_name)); users.insert(user); } } GtkTextIter next = begin; gtk_text_iter_forward_to_tag_toggle(&next, 0); // split text by newlines so we can // insert line number elements gchar* text = gtk_text_iter_get_text(&begin, &next); try { gchar const* last_pos = text; for(gchar const* i = last_pos; *i; ++i) { if(*i != '\n') continue; ++line_counter; gchar const* next_pos = i; ++next_pos; last_node->add_child_text( Glib::ustring(last_pos, next_pos)); last_pos = next_pos; line_no = last_node->add_child("span"); line_no->set_attribute("class", "line_no"); line_no->set_attribute( "id", uprintf("line_%d", line_counter)); } last_node->add_child_text( Glib::ustring(last_pos)); } catch(...) { g_free(text); throw; } g_free(text); // if we do not have any tags, we did not add classes // and consequently did not go into a new span if(!classes.empty()) last_node = last_node->get_parent(); begin = next; } } // some random interesting information/advertisement to be put at // the end of the html output void dump_info(xmlpp::Element* node, Gobby::TextSessionView& view) { using namespace Gobby; // put current time char const* time_str; int const n = 128; char buf[n]; { std::time_t now; std::time(&now); // TODO: localtime is not threadsafe if(std::strftime(buf, n, "%c", localtime(&now))) time_str = buf; else time_str = _(""); } char const* hostname = view.get_hostname().c_str(); char const* path = view.get_path().c_str(); char const* translated = // %1$s is session name/hostname // %2$s is path within the session // %3$s is current date as formatted by %c, // %4$s is a link to the gobby site, it must be present because // we need to handle that manually to insert a hyperlink // instead of just printf'ing it. _("Document generated from %1$s:%2$s at %3$s by %4$s"); char const* p = std::strstr(translated, "%4$s"); g_assert(p); node->add_child_text( uprintf(Glib::ustring(translated, p).c_str(), hostname, path, time_str)); xmlpp::Element* link = node->add_child("a"); link->set_attribute("href", "http://gobby.0x539.de/"); link->add_child_text(PACKAGE_STRING); if(*p != '\0') node->add_child_text( uprintf(p+4 , hostname, path, time_str)); } // list each author before the actual text void dump_user_list(xmlpp::Element* list, const std::set& users) { for(std::set::const_iterator i = users.begin(); i != users.end(); ++i) { gdouble hue = inf_text_user_get_hue(*i); hue = std::fmod(hue, 1); Gdk::Color c; c.set_hsv(360.0 * hue, 0.35, 1.0); gchar const* name = inf_user_get_name(INF_USER(*i)); const unsigned int rgb = color_to_rgb(c.gobj()); xmlpp::Element* item = list->add_child("li"); item->add_child_text(name); item->set_attribute( "style", uprintf("background-color: #%06x;\n", rgb)); } } void dump_tags_style(xmlpp::Element* css, const priority_tag_set& tags) { for(priority_tag_set::const_iterator i = tags.begin(); i != tags.end(); ++i) { GdkColor* fg, * bg; gint weight; gboolean underline; PangoStyle style; gboolean fg_set, bg_set, weight_set, underline_set, style_set; g_object_get(G_OBJECT(*i), "background-gdk", &bg, "foreground-gdk", &fg, "weight", &weight, "underline", &underline, "style", &style, "background-set", &bg_set, "foreground-set", &fg_set, "weight-set", &weight_set, "underline-set", &underline_set, "style-set", &style_set, NULL); const unsigned int bg_rgb = color_to_rgb(bg); const unsigned int fg_rgb = color_to_rgb(fg); gdk_color_free(fg); gdk_color_free(bg); css->add_child_text( uprintf(".tag_%p {\n", static_cast(*i))); if(fg_set) css->add_child_text(uprintf( " color: #%06x;\n", fg_rgb)); if(bg_set) css->add_child_text(uprintf( " background-color: #%06x;\n", bg_rgb)); if(weight_set) css->add_child_text(uprintf( " font-weight: %d;\n", weight)); if(underline_set) css->add_child_text(uprintf( " text-decoration: %s;\n", underline ? "underline" : "none")); if(style_set) css->add_child_text(uprintf( " font-style: %s;\n", (style == PANGO_STYLE_ITALIC) ? "italic" : "none")); css->add_child_text("}\n"); } } // generate xhtml representation of the document and write it to the // specified location in the filesystem std::string export_html(Gobby::TextSessionView& view) { using namespace Gobby; xmlpp::Document output; output.set_internal_subset("html", "-//W3C//DTD XHTML 1.1//EN", "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"); xmlpp::Element * root = output.create_root_node( "html", "http://www.w3.org/1999/xhtml"), * head = root->add_child("head"), * body = root->add_child("body"), * title = head->add_child("title"), * style = head->add_child("style"), * h1 = body->add_child("h1"), * h2 = body->add_child("h2"), * user_list = body->add_child("ul"), * content = body->add_child("pre"), * info = body->add_child("p"), * icon = h1->add_child("img"); icon->set_attribute("src", gobby_icon); icon->set_attribute("width", "48"); icon->set_attribute("height", "48"); icon->set_attribute("alt", "a gobby document:"); icon->set_attribute("class", "icon"); const Glib::ustring& document_name = view.get_title(); title->add_child_text(document_name + " - infinote document"); h1->add_child_text(document_name); content->set_attribute("class", "document"); std::set users; priority_tag_set tags; unsigned int line_counter; dump_buffer(view, content, users, tags, line_counter); h2->add_child_text(_("Participants")); info->set_attribute("class", "info"); dump_info(info, view); style->set_attribute("type", "text/css"); dump_user_list(user_list, users); dump_tags_style(style, tags); if(!user_list->cobj()->children) { body->remove_child(h2); body->remove_child(user_list); } style->add_child_text( ".document {\n" " border-top: 1px solid gray;\n" " border-bottom: 1px solid black;\n" " padding-bottom: 1.2em;\n" " counter-reset: line;\n" "}\n" ".line_no:before {\n" " content: counter(line);\n" " counter-increment: line;\n" "}\n" ".info {\n" " font-size: small;\n" "}\n"); style->add_child_text( uprintf( ".line_no {\n" " position: absolute;\n" " float: left;\n" " clear: left;\n" " margin-left: -%1$uem;\n" " color: gray;\n" "}\n" ".document {\n" " padding-left: %1$uem\n" "}\n", static_cast( std::log(line_counter) / std::log(10))+1)); return output.write_to_string("utf-8"); } } // anonymous namespace Gobby::OperationExportHtml::OperationExportHtml(Operations& operations, TextSessionView& view, const std::string& uri): Operation(operations), m_title(view.get_title()), m_uri(uri), m_xml(export_html(view)), m_index(0) { } Gobby::OperationExportHtml::~OperationExportHtml() { if(m_file) { // TODO: Cancel outstanding async operations? get_status_bar().remove_message(m_message_handle); // Reset file explicitely before closing stream so that, on // failure, existing files are not overriden with the // temporary files we actually wrote to, at least for local // files. m_file.reset(); } } void Gobby::OperationExportHtml::start() { m_file = Gio::File::create_for_uri(m_uri); m_file->replace_async( sigc::mem_fun(*this, &OperationExportHtml::on_file_replace)); m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Exporting document \"%1\" to \"%2\" in HTML..."), m_title, m_uri)); } void Gobby::OperationExportHtml::on_file_replace( const Glib::RefPtr& result) { try { m_stream = m_file->replace_finish(result); m_stream->write_async( m_xml.c_str(), m_xml.length(), sigc::mem_fun( *this, &OperationExportHtml::on_stream_write)); } catch(const Glib::Exception& ex) { error(ex.what()); } } void Gobby::OperationExportHtml::on_stream_write( const Glib::RefPtr& result) { try { gssize size = m_stream->write_finish(result); // On size < 0 an exception should have been thrown. g_assert(size >= 0); m_index += size; if(m_index < m_xml.length()) { // Write next chunk m_stream->write_async( m_xml.c_str() + m_index, m_xml.length() - m_index, sigc::mem_fun( *this, &OperationExportHtml:: on_stream_write)); } else { m_stream->close(); finish(); } } catch(const Glib::Exception& ex) { error(ex.what()); } } void Gobby::OperationExportHtml::error(const Glib::ustring& message) { get_status_bar().add_error_message( Glib::ustring::compose( _("Failed to export document \"%1\" to HTML"), m_file->get_uri()), message); fail(); } gobby-0.5.0/code/operations/operation-subscribe-path.cpp0000644000175000017500000002552712375143401020264 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "operations/operation-subscribe-path.hpp" #include "util/i18n.hpp" #include "util/uri.hpp" namespace { std::vector split_path(const std::string& path) { std::vector result; if(path.empty()) return result; if(path[0] != '/') { throw std::runtime_error( Glib::ustring::compose( Gobby::_("Invalid path: \"%1\""), path)); } std::string::size_type prev = 1, pos; while( (pos = path.find('/', prev)) != std::string::npos) { std::string component = path.substr(prev, pos - prev); if(component.empty()) { throw std::runtime_error( Glib::ustring::compose( Gobby::_("Invalid path " "component: \"%1\""), component)); } result.push_back(component); prev = pos + 1; } // Trailing '/' is allowed std::string component = path.substr(prev); if(!component.empty()) result.push_back(component); return result; } std::string make_path_string(const std::vector& path) { std::string result; for(std::vector::const_iterator iter = path.begin(); iter != path.end(); ++iter) { result += "/"; result += *iter; } return result; } } Gobby::OperationSubscribePath::OperationSubscribePath(Operations& operations, const std::string& uri): Operation(operations), m_browser(NULL), m_target(uri), m_request(NULL), m_notify_status_id(0), m_message_handle(get_status_bar().invalid_handle()) { } Gobby::OperationSubscribePath::OperationSubscribePath(Operations& operations, InfBrowser* inf_browser, const std::string& p): Operation(operations), m_browser(inf_browser), m_target(p), m_request(NULL), m_notify_status_id(0), m_message_handle(get_status_bar().invalid_handle()) { g_object_weak_ref(G_OBJECT(m_browser), on_browser_deleted_static, this); } Gobby::OperationSubscribePath::~OperationSubscribePath() { if(m_request != NULL) { g_signal_handlers_disconnect_by_func( G_OBJECT(m_request), (gpointer)G_CALLBACK(on_subscribe_finished_static), this); g_signal_handlers_disconnect_by_func( G_OBJECT(m_request), (gpointer)G_CALLBACK(on_explore_finished_static), this); } if(m_notify_status_id != 0) g_signal_handler_disconnect(m_browser, m_notify_status_id); if(m_message_handle != get_status_bar().invalid_handle()) get_status_bar().remove_message(m_message_handle); if(m_browser != NULL) { g_object_weak_unref(G_OBJECT(m_browser), on_browser_deleted_static, this); } } void Gobby::OperationSubscribePath::start() { try { if(m_browser) { m_path = split_path(m_target); m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Subscribing to \"%1\"..."), m_target)); start_with_browser(); } else { start_without_browser(); } } catch(const std::exception& ex) { get_status_bar().add_error_message( Glib::ustring::compose( _("Failed to connect to \"%1\""), m_target), ex.what()); fail(); } } void Gobby::OperationSubscribePath::start_without_browser() { std::string scheme, netloc, path; parse_uri(m_target, scheme, netloc, path); if(scheme != "infinote") { throw std::runtime_error( Glib::ustring::compose( _("URI scheme \"%1\" not supported"), scheme)); } m_path = split_path(path); std::string hostname, service; unsigned int device_index; parse_netloc(netloc, hostname, service, device_index); try { m_browser = get_browser().connect_to_host( hostname, service, device_index); g_assert(m_browser != NULL); // We need a weak reference on the browser, so that we can // cancel the operation in case it disappears. This happens // when the connection manager notices that a connection to // the host which the new connection is trying to connect to // exists already. g_object_weak_ref(G_OBJECT(m_browser), on_browser_deleted_static, this); if(m_path.empty()) { m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Connecting to \"%1\"..."), m_target)); } else { m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Subscribing to \"%1\"..."), m_target)); } start_with_browser(); } catch(const std::exception& ex) { if(m_path.empty()) { get_status_bar().add_error_message( Glib::ustring::compose( _("Failed to connect to \"%1\""), m_target), ex.what()); } else { get_status_bar().add_error_message( Glib::ustring::compose( _("Could not subscribe to \"%1\""), m_target), ex.what()); } fail(); } } void Gobby::OperationSubscribePath::start_with_browser() { InfBrowserStatus status; g_object_get(G_OBJECT(m_browser), "status", &status, NULL); if(status == INF_BROWSER_OPEN) { inf_browser_get_root(m_browser, &m_path_iter); m_path_index = 0; explore(); } else { m_notify_status_id = g_signal_connect( G_OBJECT(m_browser), "notify::status", G_CALLBACK(on_notify_status_static), this); } } void Gobby::OperationSubscribePath::explore() { if(m_path_index == m_path.size()) { // We are done get_browser().set_selected(m_browser, &m_path_iter); if(inf_browser_is_subdirectory(m_browser, &m_path_iter)) { finish(); } else { InfSessionProxy* proxy = inf_browser_get_session( m_browser, &m_path_iter); if(proxy != NULL) { InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); SessionView* view = get_folder_manager().lookup_document( session); g_object_unref(session); if(view != NULL) { get_folder_manager(). switch_to_document( *view); } else { get_folder_manager().add_document( m_browser, &m_path_iter, proxy, NULL); } finish(); } else { make_subscribe_request(); } } } else { if(inf_browser_is_subdirectory(m_browser, &m_path_iter)) { // This is a subdirectory node. Explore it. if(inf_browser_get_explored(m_browser, &m_path_iter)) { descend(); } else { make_explore_request(); } } else { // This is a leaf node. This is an error, since we // did not yet end up at the end of the path. get_browser().set_selected(m_browser, &m_path_iter); get_status_bar().remove_message(m_message_handle); get_status_bar().add_error_message( Glib::ustring::compose( _("Could not subscribe to \"%1\""), m_target), Glib::ustring::compose( _("Path \"%1\" does not exist"), make_path_string(m_path))); fail(); } } } void Gobby::OperationSubscribePath::descend() { g_assert(m_path_index < m_path.size()); g_assert(inf_browser_is_subdirectory(m_browser, &m_path_iter)); g_assert(inf_browser_get_explored(m_browser, &m_path_iter)); if(inf_browser_get_child(m_browser, &m_path_iter)) { do { const char* name = inf_browser_get_node_name( m_browser, &m_path_iter); if(m_path[m_path_index] == name) { ++m_path_index; explore(); return; } } while(inf_browser_get_next(m_browser, &m_path_iter)); } // Cannot find child get_status_bar().remove_message(m_message_handle); m_message_handle = get_status_bar().invalid_handle(); get_status_bar().add_error_message( Glib::ustring::compose( _("Could not subscribe to \"%1\""), m_target), Glib::ustring::compose( _("Path \"%1\" does not exist"), make_path_string(m_path))); fail(); } void Gobby::OperationSubscribePath::make_explore_request() { g_assert(m_request == NULL); m_request = inf_browser_get_pending_request( m_browser, &m_path_iter, "explore-node"); if(m_request == NULL) { m_request = inf_browser_explore( m_browser, &m_path_iter, on_explore_finished_static, this); } else { g_signal_connect( G_OBJECT(m_request), "finished", G_CALLBACK(on_explore_finished_static), this); } } void Gobby::OperationSubscribePath::make_subscribe_request() { g_assert(m_request == NULL); m_request = inf_browser_get_pending_request( m_browser, &m_path_iter, "subscribe-session"); if(m_request == NULL) { m_request = inf_browser_subscribe( m_browser, &m_path_iter, on_subscribe_finished_static, this); } else { g_signal_connect( G_OBJECT(m_request), "finished", G_CALLBACK(on_subscribe_finished_static), this); } } void Gobby::OperationSubscribePath::on_notify_status() { InfBrowserStatus status; g_object_get(G_OBJECT(m_browser), "status", &status, NULL); switch(status) { case INF_BROWSER_OPEN: g_signal_handler_disconnect(m_browser, m_notify_status_id); m_notify_status_id = 0; inf_browser_get_root(m_browser, &m_path_iter); m_path_index = 0; explore(); break; case INF_BROWSER_OPENING: break; case INF_BROWSER_CLOSED: // Don't set an error message, the user will already be // notified by the closed browser. fail(); break; default: g_assert_not_reached(); break; } } void Gobby::OperationSubscribePath::on_browser_deleted() { m_browser = NULL; m_notify_status_id = 0; // Don't set an error message, the user will already be // notified by the closed browser. fail(); } void Gobby::OperationSubscribePath::on_explore_finished(const GError* error) { m_request = NULL; if(error != NULL) { get_status_bar().add_error_message( Glib::ustring::compose( _("Could not subscribe to \"%1\""), m_target), error->message); fail(); } else { descend(); } } void Gobby::OperationSubscribePath::on_subscribe_finished( const InfBrowserIter* iter, const GError* error) { m_request = NULL; if(error != NULL) { get_status_bar().add_error_message( Glib::ustring::compose( _("Could not subscribe to \"%1\""), m_target), error->message); fail(); } else { InfSessionProxy* proxy = inf_browser_get_session(m_browser, iter); g_assert(proxy != NULL); get_folder_manager().add_document( m_browser, iter, proxy, NULL); /* From this point on subscription-commands takes over */ finish(); } } gobby-0.5.0/code/operations/operation-new.cpp0000644000175000017500000000563112370704570016141 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "operations/operation-new.hpp" #include "core/noteplugin.hpp" #include "util/i18n.hpp" Gobby::OperationNew::OperationNew(Operations& operations, InfBrowser* browser, const InfBrowserIter* parent, const Glib::ustring& name, bool directory): Operation(operations), m_request(NULL), m_browser(browser), m_parent(*parent), m_name(name), m_directory(directory) { g_object_ref(browser); } Gobby::OperationNew::~OperationNew() { if(m_request != NULL) { g_signal_handlers_disconnect_by_func( G_OBJECT(m_request), (gpointer)G_CALLBACK(on_request_finished_static), this); g_object_unref(m_request); get_status_bar().remove_message(m_message_handle); } g_object_unref(m_browser); } void Gobby::OperationNew::start() { InfRequest* request; if(m_directory) { request = inf_browser_add_subdirectory( m_browser, &m_parent, m_name.c_str(), NULL, on_request_finished_static, this); } else { request = inf_browser_add_note( m_browser, &m_parent, m_name.c_str(), "InfText", NULL, NULL, TRUE, on_request_finished_static, this); } if(request != NULL) { m_request = request; g_object_ref(m_request); m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( m_directory ? _("Creating directory \"%1\"...") : _("Creating document \"%1\"..."), m_name)); } } void Gobby::OperationNew::on_request_finished(const InfBrowserIter* iter, const GError* error) { if(error) { const Glib::ustring prefix = Glib::ustring::compose( m_directory ? _("Failed to create directory \"%1\""): _("Failed to create document \"%1\""), m_name); get_status_bar().add_error_message(prefix, error->message); fail(); } else { if(!m_directory) { InfSessionProxy* proxy = inf_browser_get_session(m_browser, iter); g_assert(proxy != NULL); get_folder_manager().add_document( m_browser, iter, proxy, NULL); } finish(); } } gobby-0.5.0/code/operations/Makefile.am0000644000175000017500000000127712370042071014673 00000000000000noinst_LIBRARIES = libgobby-operations.a libgobby_operations_a_SOURCES = \ operations.cpp \ operation-delete.cpp \ operation-export-html.cpp \ operation-new.cpp \ operation-open.cpp \ operation-open-multiple.cpp \ operation-save.cpp \ operation-subscribe-path.cpp noinst_HEADERS = \ operations.hpp \ operation-delete.hpp \ operation-export-html.hpp \ operation-new.hpp \ operation-open.hpp \ operation-open-multiple.hpp \ operation-save.hpp \ operation-subscribe-path.hpp appicondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/gobby-0.5 AM_CPPFLAGS = $(gobby_CFLAGS) $(unique_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code gobby-0.5.0/code/operations/operation-open-multiple.hpp0000644000175000017500000000443712370427450020151 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATION_OPEN_MULTIPLE_HPP_ #define _GOBBY_OPERATIONS_OPERATION_OPEN_MULTIPLE_HPP_ #include "operations/operations.hpp" #include "core/nodewatch.hpp" #include #include namespace Gobby { class OperationOpenMultiple: public Operations::Operation, public sigc::trackable { public: typedef Operations::uri_list uri_list; OperationOpenMultiple(Operations& operations, const Preferences& preferences, InfBrowser* browser, const InfBrowserIter* parent, const uri_list& uris); virtual void start(); protected: struct Info { Glib::ustring uri; std::string name; const char* encoding; }; typedef std::list info_list; void query(const info_list::iterator& info); void on_node_removed(); void on_query_info(const Glib::RefPtr& result, const Glib::RefPtr& file, const info_list::iterator& info); void on_finished(bool success, const info_list::iterator& info); void load_info(const info_list::iterator& iter); void single_error(const info_list::iterator& iter, const Glib::ustring& message); void fatal_error(const Glib::ustring& message); const Preferences& m_preferences; NodeWatch m_parent; unsigned int m_num_uris; info_list m_infos; OperationOpen* m_current; }; } #endif // _GOBBY_OPERATIONS_OPERATION_OPEN_MULTIPLE_HPP_ gobby-0.5.0/code/operations/operation-save.cpp0000644000175000017500000001643112370427450016305 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "operations/operation-save.hpp" #include "util/i18n.hpp" #include #include Gobby::OperationSave::OperationSave(Operations& operations, TextSessionView& view, const std::string& uri, const std::string& encoding, DocumentInfoStorage::EolStyle eol_style): Operation(operations), m_uri(uri), m_view(&view), m_start_time(std::time(NULL)), m_current_line_index(0), m_encoding(encoding), m_eol_style(eol_style), m_storage_key(view.get_info_storage_key()), m_iconv(encoding.c_str(), "UTF-8"), m_buffer_size(0), m_buffer_index(0) { const Folder& folder = get_folder_manager().get_text_folder(); folder.signal_document_removed().connect( sigc::mem_fun(*this, &OperationSave::on_document_removed)); // Load content so that the session can go on while saving GtkTextBuffer* buffer = GTK_TEXT_BUFFER(view.get_text_buffer()); GtkTextIter prev; GtkTextIter pos; GtkTextIter old_pos; gtk_text_buffer_get_start_iter(buffer, &prev); pos = prev; if(!gtk_text_iter_ends_line(&pos)) gtk_text_iter_forward_to_line_end(&pos); do { Line line; line.first = gtk_text_buffer_get_text(buffer, &prev, &pos, TRUE); line.second = gtk_text_iter_get_line_index(&pos); m_lines.push_back(line); //if(gtk_text_iter_is_end(&prev)) // break; old_pos = pos; gtk_text_iter_forward_line(&prev); gtk_text_iter_forward_to_line_end(&pos); } while(!gtk_text_iter_equal(&pos, &old_pos)); m_current_line = m_lines.begin(); } Gobby::OperationSave::~OperationSave() { // TODO: Cancel outstanding async operations? for(std::list::iterator iter = m_lines.begin(); iter != m_lines.end(); ++ iter) { g_free(iter->first); } get_status_bar().remove_message(m_message_handle); // Reset file explicitely before closing stream so that, on failure, // existing files are not overriden with the temporary files we // actually wrote to, at least for local files. m_file.reset(); } void Gobby::OperationSave::start() { m_file = Gio::File::create_for_uri(m_uri); m_file->replace_async(sigc::mem_fun(*this, &OperationSave::on_file_replace)); m_message_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Saving document \"%1\" to \"%2\"..."), m_view->get_title(), m_uri)); } void Gobby::OperationSave::on_document_removed(SessionView& view) { // We keep the document to unset the modified flag when the operation // is complete, however, if the document is removed in the meanwhile, // then we don't need to care anymore. if(m_view == &view) m_view = NULL; } void Gobby::OperationSave::on_file_replace( const Glib::RefPtr& result) { try { m_stream = m_file->replace_finish(result); attempt_next(); } catch(const Glib::Exception& ex) { error(ex.what()); } } void Gobby::OperationSave::attempt_next() { bool done; if(m_current_line == m_lines.end()) { done = true; } else { // Always save a newline at the end, except the document // is empty. assert(!m_lines.empty()); std::list::const_iterator iter = m_lines.begin(); ++iter; if(iter == m_lines.end() && m_lines.front().first[0] == '\0') done = true; else done = false; } if(done) { DocumentInfoStorage::Info info; info.uri = m_file->get_uri(); info.encoding = m_encoding; info.eol_style = m_eol_style; get_info_storage().set_info(m_storage_key, info); m_stream->close(); if(m_view != NULL) { // TODO: Don't unset modified flag if the document has // changed in the meanwhile, but set // buffer-modified-time in algorithm. gtk_text_buffer_set_modified( GTK_TEXT_BUFFER(m_view->get_text_buffer()), FALSE); } finish(); } else { write_next(); } } void Gobby::OperationSave::write_next() { gchar* inbuf; gsize inlen; char newlinebuf[2] = { '\r', '\n' }; if(m_current_line_index < m_current_line->second) { inbuf = m_current_line->first + m_current_line_index; inlen = m_current_line->second - m_current_line_index; } else { // Write newline switch(m_eol_style) { case DocumentInfoStorage::EOL_CR: inbuf = newlinebuf + 0; inlen = 1; break; case DocumentInfoStorage::EOL_LF: inbuf = newlinebuf + 1; inlen = 1; break; case DocumentInfoStorage::EOL_CRLF: inbuf = newlinebuf + 0; inlen = 2; break; default: g_assert_not_reached(); break; } } gchar* outbuf = m_buffer; gsize outlen = BUFFER_SIZE; gchar* preserve_inbuf = inbuf; /* iconv is defined as libiconv on Windows, or at least when using the * binary packages from ftp.gnome.org. Therefore we can't properly * call Glib::IConv::iconv. Therefore, we use the C API here. */ std::size_t retval = g_iconv( m_iconv.gobj(), &inbuf, &inlen, &outbuf, &outlen); if(retval == static_cast(-1)) { g_assert(errno != EILSEQ); // E2BIG and EINVAL are fully OK here. } else if(retval > 0) { error(_("The document contains one or more characters that " "cannot be encoded in the specified character " "coding.")); return; } // Advance bytes read. m_current_line_index += inbuf - preserve_inbuf; m_buffer_size = BUFFER_SIZE - outlen; m_buffer_index = 0; g_assert(m_buffer_size > 0); if(m_current_line_index > m_current_line->second) { // Converted whole line: g_free(m_current_line->first); m_current_line = m_lines.erase(m_current_line); m_current_line_index = 0; } m_stream->write_async(m_buffer, m_buffer_size, sigc::mem_fun(*this, &OperationSave::on_stream_write)); } void Gobby::OperationSave::on_stream_write( const Glib::RefPtr& result) { try { gssize size = m_stream->write_finish(result); // On size < 0 an exception should have been thrown. g_assert(size >= 0); m_buffer_index += size; if(m_buffer_index < m_buffer_size) { // Write next chunk m_stream->write_async( m_buffer + m_buffer_index, m_buffer_size - m_buffer_index, sigc::mem_fun( *this, &OperationSave::on_stream_write)); } else { // Go on with next part of line and/or next line attempt_next(); } } catch(const Glib::Exception& ex) { error(ex.what()); } } void Gobby::OperationSave::error(const Glib::ustring& message) { get_status_bar().add_error_message( Glib::ustring::compose(_("Failed to save document \"%1\""), m_file->get_uri()), message); fail(); } gobby-0.5.0/code/operations/operation-open.hpp0000644000175000017500000000604012370427450016310 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_OPERATION_OPEN_HPP_ #define _GOBBY_OPERATIONS_OPERATION_OPEN_HPP_ #include "operations/operations.hpp" #include "core/documentinfostorage.hpp" #include "core/nodewatch.hpp" #include #include #include #include namespace Gobby { class OperationOpen: public Operations::Operation, public sigc::trackable { public: OperationOpen(Operations& operations, const Preferences& preferences, InfBrowser* browser, const InfBrowserIter* parent, const std::string& name, const std::string& uri, const char* encoding /* NULL means auto-detect */); virtual ~OperationOpen(); virtual void start(); protected: static void on_request_finished_static(InfRequest* request, const InfRequestResult* result, const GError* error, gpointer user_data) { const InfBrowserIter* iter; inf_request_result_get_add_node(result, NULL, NULL, &iter); static_cast(user_data)-> on_request_finished(iter, error); } void on_node_removed(); void on_file_read(const Glib::RefPtr& result); void on_stream_read(const Glib::RefPtr& result); bool on_idle(); void encoding_error(); void read_finish(); void on_request_finished(const InfBrowserIter* iter, const GError* error); void error(const Glib::ustring& message); protected: const Preferences& m_preferences; const std::string m_name; const std::string m_uri; NodeWatch m_parent; int m_encoding_auto_detect_index; std::auto_ptr m_iconv; std::string m_encoding; DocumentInfoStorage::EolStyle m_eol_style; struct buffer { static const unsigned int SIZE = 1024; char buf[SIZE]; }; Glib::RefPtr m_file; Glib::RefPtr m_stream; std::auto_ptr m_buffer; sigc::connection m_idle_connection; InfRequest* m_request; std::vector m_raw_content; std::vector::size_type m_raw_pos; GtkTextBuffer* m_content; StatusBar::MessageHandle m_message_handle; }; } #endif // _GOBBY_OPERATIONS_OPERATION_OPEN_HPP_ gobby-0.5.0/code/window.hpp0000644000175000017500000001457312370427450012507 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_WINDOW_HPP_ #define _GOBBY_WINDOW_HPP_ #include "features.hpp" #include "commands/autosave-commands.hpp" #include "commands/browser-commands.hpp" #include "commands/subscription-commands.hpp" #include "commands/synchronization-commands.hpp" #include "commands/user-join-commands.hpp" #include "commands/browser-context-commands.hpp" #include "commands/auth-commands.hpp" #include "commands/folder-commands.hpp" #include "commands/file-commands.hpp" #include "commands/edit-commands.hpp" #include "commands/view-commands.hpp" #include "commands/help-commands.hpp" #include "operations/operations.hpp" #include "dialogs/initial-dialog.hpp" #include "core/selfhoster.hpp" #include "core/iconmanager.hpp" #include "core/header.hpp" #include "core/folder.hpp" #include "core/browser.hpp" #include "core/statusbar.hpp" #include "core/preferences.hpp" #include "core/filechooser.hpp" #include "core/closableframe.hpp" #include "core/titlebar.hpp" #include "util/config.hpp" #include #include #include #ifdef WITH_UNIQUE # include #endif #include namespace Gobby { #ifdef WITH_UNIQUE const int UNIQUE_GOBBY_CONNECT = 1; #endif class Window : public Gtk::Window { public: Window(unsigned int argc, const char* const argv[], Config& config, Preferences& preferences, const IconManager& icon_manager, CertificateManager& cert_manager #ifdef WITH_UNIQUE , UniqueApp* app #endif ); ~Window(); void connect_to_host(const Glib::ustring& hostname) { m_operations.subscribe_path(hostname); } protected: #ifdef WITH_UNIQUE static UniqueResponse on_message_received_static(UniqueApp* app, UniqueCommand command, UniqueMessageData* message, guint time, gpointer user_data) { return static_cast(user_data)->on_message_received( command, message, time); } #endif // Gtk::Window overrides virtual bool on_delete_event(GdkEventAny* event); virtual bool on_key_press_event(GdkEventKey* event); virtual void on_realize(); virtual void on_show(); void on_initial_dialog_hide(); static gboolean on_switch_to_chat_static(GtkAccelGroup* group, GObject* acceleratable, guint keyval, GdkModifierType modifier, gpointer user_data) { return static_cast(user_data)->on_switch_to_chat(); } static gboolean on_switch_to_text_static(GtkAccelGroup* group, GObject* acceleratable, guint keyval, GdkModifierType modifier, gpointer user_data) { return static_cast(user_data)->on_switch_to_text(); } bool on_switch_to_chat(); bool on_switch_to_text(); void on_chat_hide(); void on_chat_show(); #ifdef WITH_UNIQUE UniqueResponse on_message_received(UniqueCommand command, UniqueMessageData* message, guint time); #endif // Command line arguments // TODO: We only require these in on_show to initially open files // passed on the command line. We can't do it in the constructor // already, because otherwise the main window is shown after the // document location dialog, and therefore ends up having focus, // which it shouldn't. Maybe we'll find a better solution which does // not require these member variables. unsigned int m_argc; const char* const* m_argv; // Config Config& m_config; GtkSourceLanguageManager* m_lang_manager; Preferences& m_preferences; CertificateManager& m_cert_manager; const IconManager& m_icon_manager; ConnectionManager m_connection_manager; #ifdef WITH_UNIQUE UniqueApp* m_app; #endif // GUI Gtk::VBox m_mainbox; Gtk::HPaned m_paned; Gtk::VPaned m_chat_paned; Folder m_text_folder; Folder m_chat_folder; StatusBar m_statusbar; Header m_header; Browser m_browser; ClosableFrame m_chat_frame; // Functionality DocumentInfoStorage m_info_storage; FolderManager m_folder_manager; FileChooser m_file_chooser; Operations m_operations; BrowserCommands m_browser_commands; BrowserContextCommands m_browser_context_commands; // TODO: This setup is a bit awkward. We need the auth commands to // provide a SASL context to the self hoster. // A better solution would be to have a new class, say AuthManager, // which creates the SASL context, and the auth manager is passed to // both connection manager and self hoster. The new class would not // do any UI, but it would do password checking from remote. For the // UI it would provide a hook which allows m_auth_commands to hook in. // This would also get rid of the ugly // connection_manager.set_sasl_context() call, since the connection // manager would then set the SASL context by itself. AuthCommands m_auth_commands; SelfHoster m_self_hoster; AutosaveCommands m_autosave_commands; SubscriptionCommands m_subscription_commands; SynchronizationCommands m_synchronization_commands; UserJoinCommands m_user_join_commands; FolderCommands m_text_folder_commands; FolderCommands m_chat_folder_commands; FileCommands m_file_commands; EditCommands m_edit_commands; ViewCommands m_view_commands; HelpCommands m_help_commands; TitleBar m_title_bar; // Dialogs std::auto_ptr m_initial_dlg; }; } #endif // _GOBBY_WINDOW_HPP_ gobby-0.5.0/code/Makefile.am0000644000175000017500000000051712370042070012503 00000000000000SUBDIRS = util core dialogs operations commands noinst_LIBRARIES = libgobby.a libgobby_a_SOURCES = \ main.cpp \ window.cpp noinst_HEADERS = window.hpp appicondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/gobby-0.5 AM_CPPFLAGS = $(gobby_CFLAGS) $(unique_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code gobby-0.5.0/code/core/0000755000175000017500000000000012376162132011464 500000000000000gobby-0.5.0/code/core/server.hpp0000644000175000017500000000424012370427450013424 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_SERVER_HPP_ #define _GOBBY_SERVER_HPP_ #include #include #include #include namespace Gobby { class Server { public: Server(InfIo* io, InfLocalPublisher* publisher); ~Server(); // Can throw; can be used on already open servers: void open(unsigned int port, InfXmppConnectionSecurityPolicy security_policy, InfCertificateCredentials* creds, InfSaslContext* sasl_context, const char* sasl_mechanisms); void close(); bool is_open() const; unsigned int get_port() const; // Use new credentials on running server, for new connections: void set_credentials(InfXmppConnectionSecurityPolicy security_policy, InfCertificateCredentials* credentials); // Set SASL context, for new connections. void set_sasl_context(InfSaslContext* sasl_context, const char* m_sasl_mechanisms); // Set a server pool to which to add the servers, and which to // use for publishing with the publisher. void set_pool(InfdServerPool* pool); protected: InfIo* m_io; InfLocalPublisher* m_publisher; InfdXmppServer* m_xmpp4; InfdXmppServer* m_xmpp6; InfdServerPool* m_pool; }; } #endif // _GOBBY_SERVER_HPP_ gobby-0.5.0/code/core/textsessionuserview.cpp0000644000175000017500000000417012370427450016275 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/textsessionuserview.hpp" Gobby::TextSessionUserView:: TextSessionUserView(TextSessionView& view, bool show_disconnected, Preferences::Option& opt_view, Preferences::Option& w): SessionUserView(view, show_disconnected, opt_view, w) { m_userlist.signal_user_activated().connect( sigc::mem_fun( *this, &TextSessionUserView::on_user_activated)); } void Gobby::TextSessionUserView::on_user_activated(InfUser* user) { g_assert(INF_TEXT_IS_USER(user)); InfTextUser* text_user = INF_TEXT_USER(user); // TODO: Instead, move this code to // TextSessionView::scroll_to_cursor_position which should take // an additional InfTextUser* argument GtkSourceBuffer* buffer = get_session_view().get_text_buffer(); GtkSourceView* view = get_session_view().get_text_view(); // Use a mark to make sure we scroll it onscreen GtkTextIter iter; gtk_text_buffer_get_iter_at_offset( GTK_TEXT_BUFFER(buffer), &iter, inf_text_user_get_caret_position(text_user)); GtkTextMark* mark = gtk_text_buffer_create_mark( GTK_TEXT_BUFFER(buffer), NULL, &iter, FALSE); gtk_text_view_scroll_to_mark( GTK_TEXT_VIEW(view), mark, 0.0, TRUE, 0.5, 0.5); gtk_text_buffer_delete_mark(GTK_TEXT_BUFFER(buffer), mark); } gobby-0.5.0/code/core/selfhoster.hpp0000644000175000017500000000512612370427450014300 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_SELF_HOSTER_HPP_ #define _GOBBY_SELF_HOSTER_HPP_ #include "core/credentialsgenerator.hpp" #include "core/certificatemanager.hpp" #include "core/statusbar.hpp" #include "core/server.hpp" #include #include #include #include #include namespace Gobby { class SelfHoster: public sigc::trackable { public: SelfHoster(InfIo* io, InfCommunicationManager* communication_manager, InfLocalPublisher* publisher, InfSaslContext* sasl_context, StatusBar& status_bar, CertificateManager& cert_manager, const Preferences& preferences); ~SelfHoster(); InfdDirectory* get_directory() { return m_directory; } protected: static void directory_foreach_func_close_static( InfXmlConnection* connection, gpointer user_data); static void directory_foreach_func_set_sasl_context_static( InfXmlConnection* connection, gpointer user_data); const char* get_sasl_mechanisms() const; bool ensure_dh_params(); void on_dh_params_done(const DHParamsGeneratorHandle* handle, gnutls_dh_params_t dh_params, const GError* error); void on_require_password_changed(); void apply_preferences(); InfSaslContext* m_sasl_context; StatusBar& m_status_bar; CertificateManager& m_cert_manager; const Preferences& m_preferences; bool m_dh_params_loaded; StatusBar::MessageHandle m_info_handle; StatusBar::MessageHandle m_dh_params_message_handle; InfdDirectory* m_directory; Server m_server; std::auto_ptr m_dh_params_handle; }; } #endif // _GOBBY_SELF_HOSTER_HPP_ gobby-0.5.0/code/core/connectionmanager.hpp0000644000175000017500000001164412375003026015610 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CONNECTIONMANAGER_HPP_ #define _GOBBY_CONNECTIONMANAGER_HPP_ #include "core/preferences.hpp" #include "core/certificatemanager.hpp" #include #include #include #include #include #include namespace Gobby { // This class manages outgoing connections. It also manages an // InfDiscoveryAvahi object. Incoming connections are handled by // SelfHoster. class ConnectionManager: public sigc::trackable { public: typedef sigc::signal SignalConnectionReplaced; ConnectionManager(const CertificateManager& cert_manager, const Preferences& preferences); ~ConnectionManager(); InfIo* get_io() { return m_io; } InfCommunicationManager* get_communication_manager() { return m_communication_manager; } InfXmppManager* get_xmpp_manager() { return m_xmpp_manager; } #ifdef LIBINFINITY_HAVE_AVAHI InfDiscovery* get_discovery() { return INF_DISCOVERY(m_discovery); } InfLocalPublisher* get_publisher() { return INF_LOCAL_PUBLISHER(m_discovery); } #else InfDiscovery* get_discovery() { return NULL; } InfLocalPublisher* get_publisher() { return NULL; } #endif // Use existing connection if any, otherwise make new one. May throw. InfXmppConnection* make_connection(const std::string& hostname, const std::string& service, unsigned int device_index); InfXmppConnection* make_connection(const InfIpAddress* address, guint port, unsigned int device_index, const std::string& hostname); void remove_connection(InfXmppConnection* connection); // SASL context to be used for all new connections void set_sasl_context(InfSaslContext* sasl_context, const char* mechanisms); SignalConnectionReplaced signal_connection_replaced() const { return m_signal_connection_replaced; } private: InfXmppConnection* create_connection(InfTcpConnection* connection, unsigned int device_index, const std::string& hostname); static void on_notify_status_static(GObject* object, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)->on_notify_status( INF_XMPP_CONNECTION(object)); } static void on_connection_added_static(InfXmppManager* manager, InfXmppConnection* xmpp, gpointer user_data) { static_cast(user_data)-> on_connection_added(xmpp); } static void on_connection_removed_static(InfXmppManager* manager, InfXmppConnection* xmpp, InfXmppConnection* replaced, gpointer user_data) { static_cast(user_data)-> on_connection_removed(xmpp, replaced); } protected: void on_connection_added(InfXmppConnection* xmpp); void on_connection_removed(InfXmppConnection* xmpp, InfXmppConnection* replaced_by); void on_security_policy_changed(); void on_credentials_changed(); void on_notify_status(InfXmppConnection* connection); const CertificateManager& m_cert_manager; const Preferences& m_preferences; InfIo* m_io; InfCommunicationManager* m_communication_manager; InfXmppManager* m_xmpp_manager; struct ConnectionInfo { gulong notify_status_handler; }; std::map m_connections; gulong m_connection_added_handler; gulong m_connection_removed_handler; InfSaslContext* m_sasl_context; std::string m_sasl_mechanisms; #ifdef LIBINFINITY_HAVE_AVAHI InfDiscoveryAvahi* m_discovery; #endif SignalConnectionReplaced m_signal_connection_replaced; }; } #endif // _GOBBY_CONNECTIONMANAGER_HPP_ gobby-0.5.0/code/core/browser.cpp0000644000175000017500000002633712375140717013612 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "dialogs/password-dialog.hpp" #include "core/browser.hpp" #include "core/noteplugin.hpp" #include "util/gtk-compat.hpp" #include "util/file.hpp" #include "util/uri.hpp" #include "util/i18n.hpp" #include #include #include #include #include gint compare_func(GtkTreeModel* model, GtkTreeIter* first, GtkTreeIter* second, gpointer user_data) { gint result; InfBrowser* br_one; InfBrowser* br_two; InfBrowserIter* bri_one; InfBrowserIter* bri_two; GtkTreeIter parent; result = 0; if(gtk_tree_model_iter_parent(model, &parent, first)) { g_assert(gtk_tree_model_iter_parent(model, &parent, second)); gtk_tree_model_get( model, first, INF_GTK_BROWSER_MODEL_COL_BROWSER, &br_one, INF_GTK_BROWSER_MODEL_COL_NODE, &bri_one, -1); gtk_tree_model_get( model, second, INF_GTK_BROWSER_MODEL_COL_BROWSER, &br_two, INF_GTK_BROWSER_MODEL_COL_NODE, &bri_two, -1); if(inf_browser_is_subdirectory(br_one, bri_one) && !inf_browser_is_subdirectory(br_two, bri_two)) { result = -1; } else if(!inf_browser_is_subdirectory(br_one, bri_one) && inf_browser_is_subdirectory(br_two, bri_two)) { result = 1; } g_object_unref(br_one); g_object_unref(br_two); inf_browser_iter_free(bri_one); inf_browser_iter_free(bri_two); } if(!result) { gchar* name_one; gchar* name_two; gtk_tree_model_get( model, first, INF_GTK_BROWSER_MODEL_COL_NAME, &name_one, -1); gtk_tree_model_get( model, second, INF_GTK_BROWSER_MODEL_COL_NAME, &name_two, -1); gchar* one = g_utf8_casefold(name_one, -1); gchar* two = g_utf8_casefold(name_two, -1); result = g_utf8_collate(one, two); g_free(name_one); g_free(name_two); g_free(one); g_free(two); } return result; } Gobby::Browser::Browser(Gtk::Window& parent, StatusBar& status_bar, ConnectionManager& connection_manager): m_parent(parent), m_status_bar(status_bar), m_connection_manager(connection_manager), m_expander(_("_Direct Connection"), true), m_hbox(false, 6), m_label_hostname(_("Host Name:")), m_entry_hostname(config_filename("recent_hosts"), 5) { m_label_hostname.show(); m_entry_hostname.get_entry()->signal_activate().connect( sigc::mem_fun(*this, &Browser::on_hostname_activate)); m_entry_hostname.show(); m_hbox.pack_start(m_label_hostname, Gtk::PACK_SHRINK); m_hbox.pack_start(m_entry_hostname, Gtk::PACK_EXPAND_WIDGET); m_hbox.show(); m_expander.add(m_hbox); m_expander.show(); m_expander.property_expanded().signal_changed().connect( sigc::mem_fun(*this, &Browser::on_expanded_changed)); m_browser_store = inf_gtk_browser_store_new( connection_manager.get_io(), connection_manager.get_communication_manager()); m_sort_model = inf_gtk_browser_model_sort_new( INF_GTK_BROWSER_MODEL(m_browser_store)); gtk_tree_sortable_set_default_sort_func( GTK_TREE_SORTABLE(m_sort_model), compare_func, NULL, NULL); if(m_connection_manager.get_discovery() != NULL) { inf_gtk_browser_store_add_discovery( m_browser_store, m_connection_manager.get_discovery()); } Glib::ustring known_hosts_file = config_filename("known_hosts"); m_cert_checker = inf_gtk_certificate_manager_new( parent.gobj(), m_connection_manager.get_xmpp_manager(), known_hosts_file.c_str()); m_browser_view = INF_GTK_BROWSER_VIEW( inf_gtk_browser_view_new_with_model( INF_GTK_BROWSER_MODEL(m_sort_model))); gtk_widget_show(GTK_WIDGET(m_browser_view)); gtk_container_add(GTK_CONTAINER(m_scroll.gobj()), GTK_WIDGET(m_browser_view)); m_scroll.set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); m_scroll.set_shadow_type(Gtk::SHADOW_IN); m_scroll.show(); connection_manager.signal_connection_replaced().connect( sigc::mem_fun(*this, &Browser::on_connection_replaced)); g_signal_connect( m_browser_store, "set-browser", G_CALLBACK(&on_set_browser_static), this ); g_signal_connect( m_browser_view, "activate", G_CALLBACK(&on_activate_static), this ); set_spacing(6); pack_start(m_scroll, Gtk::PACK_EXPAND_WIDGET); pack_start(m_expander, Gtk::PACK_SHRINK); init_accessibility(); set_focus_child(m_expander); } Gobby::Browser::~Browser() { g_object_unref(m_browser_store); g_object_unref(m_sort_model); g_object_unref(m_cert_checker); } void Gobby::Browser::init_accessibility() { Glib::RefPtr relation_set; Glib::RefPtr relation; std::vector > targets; // Associate the hostname label with the corresponding entry field. Glib::RefPtr entry_hostname_acc = m_entry_hostname.get_accessible(); Glib::RefPtr label_hostname_acc = m_label_hostname.get_accessible(); relation_set = entry_hostname_acc->get_relation_set(); targets.push_back(label_hostname_acc); relation = Atk::Relation::create(targets, Atk::RELATION_LABELLED_BY); relation_set->set_add(relation); } bool Gobby::Browser::get_selected_browser(InfBrowser** browser) { GtkTreeIter tree_iter; if(!inf_gtk_browser_view_get_selected(m_browser_view, &tree_iter)) return false; InfBrowser* tmp_browser; gtk_tree_model_get( GTK_TREE_MODEL(m_sort_model), &tree_iter, INF_GTK_BROWSER_MODEL_COL_BROWSER, &tmp_browser, -1); if(tmp_browser == NULL) return false; *browser = tmp_browser; g_object_unref(tmp_browser); return true; } bool Gobby::Browser::get_selected_iter(InfBrowser* browser, InfBrowserIter* iter) { GtkTreeIter tree_iter; if(!inf_gtk_browser_view_get_selected(m_browser_view, &tree_iter)) return false; InfBrowserStatus browser_status; g_object_get(G_OBJECT(browser), "status", &browser_status, NULL); if(browser_status != INF_BROWSER_OPEN) return false; InfBrowserIter *tmp_iter; gtk_tree_model_get( GTK_TREE_MODEL(m_sort_model), &tree_iter, INF_GTK_BROWSER_MODEL_COL_NODE, &tmp_iter, -1); *iter = *tmp_iter; inf_browser_iter_free(tmp_iter); return true; } void Gobby::Browser::set_selected(InfBrowser* browser, const InfBrowserIter* iter) { GtkTreeIter tree_iter; gboolean has_iter = inf_gtk_browser_model_browser_iter_to_tree_iter( INF_GTK_BROWSER_MODEL(m_sort_model), browser, iter, &tree_iter); g_assert(has_iter == TRUE); inf_gtk_browser_view_set_selected(m_browser_view, &tree_iter); } InfBrowser* Gobby::Browser::connect_to_host(const std::string& hostname, const std::string& service, unsigned int device_index) { // Check whether we do have such a connection already: InfXmppConnection* xmpp = m_connection_manager.make_connection( hostname, service, device_index); // Should have thrown otherwise: g_assert(xmpp != NULL); // TODO: Remove erroneous entry with same name, if any, before // adding. InfBrowser* browser = inf_gtk_browser_store_add_connection( m_browser_store, INF_XML_CONNECTION(xmpp), hostname.c_str()); return browser; } InfBrowser* Gobby::Browser::connect_to_host(const InfIpAddress* address, guint port, unsigned int device_index, const std::string& hostname) { // Check whether we do have such a connection already: InfXmppConnection* xmpp = m_connection_manager.make_connection( address, port, device_index, hostname); // Should have thrown otherwise: g_assert(xmpp != NULL); // TODO: Remove erroneous entry with same name, if any, before // adding. InfBrowser* browser = inf_gtk_browser_store_add_connection( m_browser_store, INF_XML_CONNECTION(xmpp), hostname.c_str()); return browser; } void Gobby::Browser::add_browser(InfBrowser* browser, const char* name) { inf_gtk_browser_store_add_browser( m_browser_store, browser, name); } void Gobby::Browser::remove_browser(InfBrowser* browser) { m_connection_manager.remove_connection( INF_XMPP_CONNECTION( infc_browser_get_connection( INFC_BROWSER(browser)))); inf_gtk_browser_store_remove_browser( m_browser_store, browser); } void Gobby::Browser::on_connection_replaced(InfXmppConnection* connection, InfXmppConnection* by) { // Remove the browser for the replaced connection, and highlight the // one it was replaced with. inf_gtk_browser_store_remove_connection( m_browser_store, INF_XML_CONNECTION(connection)); /* The connection exists already, we just use this function to obtain * the browser. * TODO: There should be a * inf_gtk_browser_store_find_browser_for_connection() function */ InfBrowser* browser = inf_gtk_browser_store_add_connection( m_browser_store, INF_XML_CONNECTION(by), ""); set_selected(browser, NULL); } void Gobby::Browser::on_expanded_changed() { if(m_expander.get_expanded()) { if(GtkCompat::is_realized(m_entry_hostname)) { m_entry_hostname.grab_focus(); } else { m_entry_hostname.signal_realize().connect( sigc::mem_fun(m_entry_hostname, &Gtk::Entry::grab_focus)); } } } void Gobby::Browser::on_set_browser(GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser) { if(new_browser) { if(INFC_IS_BROWSER(new_browser)) { InfcBrowser* browser = INFC_BROWSER(new_browser); infc_browser_add_plugin(browser, Plugins::C_TEXT); infc_browser_add_plugin(browser, Plugins::C_CHAT); } else if(INFD_IS_DIRECTORY(new_browser)) { InfdDirectory* directory = INFD_DIRECTORY(new_browser); infd_directory_add_plugin(directory, Plugins::D_TEXT); infd_directory_add_plugin(directory, Plugins::D_CHAT); } } } void Gobby::Browser::on_activate(GtkTreeIter* iter) { InfBrowser* browser; InfBrowserIter* browser_iter; gtk_tree_model_get(GTK_TREE_MODEL(m_sort_model), iter, INF_GTK_BROWSER_MODEL_COL_BROWSER, &browser, INF_GTK_BROWSER_MODEL_COL_NODE, &browser_iter, -1); m_signal_activate.emit(browser, browser_iter); inf_browser_iter_free(browser_iter); g_object_unref(browser); } void Gobby::Browser::on_hostname_activate() { Glib::ustring str = m_entry_hostname.get_entry()->get_text(); if(str.empty()) return; m_entry_hostname.commit(); m_entry_hostname.get_entry()->set_text(""); m_signal_connect.emit(str); } gobby-0.5.0/code/core/Makefile.in0000644000175000017500000005030712376162111013453 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = code/core DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ libgobby_core_a_AR = $(AR) $(ARFLAGS) libgobby_core_a_LIBADD = am_libgobby_core_a_OBJECTS = browser.$(OBJEXT) \ certificatemanager.$(OBJEXT) chatsessionview.$(OBJEXT) \ chattablabel.$(OBJEXT) closableframe.$(OBJEXT) \ connectionmanager.$(OBJEXT) credentialsgenerator.$(OBJEXT) \ documentinfostorage.$(OBJEXT) filechooser.$(OBJEXT) \ folder.$(OBJEXT) foldermanager.$(OBJEXT) header.$(OBJEXT) \ huebutton.$(OBJEXT) iconmanager.$(OBJEXT) nodewatch.$(OBJEXT) \ noteplugin.$(OBJEXT) preferences.$(OBJEXT) \ selfhoster.$(OBJEXT) server.$(OBJEXT) \ sessionuserview.$(OBJEXT) sessionview.$(OBJEXT) \ statusbar.$(OBJEXT) tablabel.$(OBJEXT) \ textsessionuserview.$(OBJEXT) textsessionview.$(OBJEXT) \ textundogrouping.$(OBJEXT) texttablabel.$(OBJEXT) \ titlebar.$(OBJEXT) userjoin.$(OBJEXT) userlist.$(OBJEXT) libgobby_core_a_OBJECTS = $(am_libgobby_core_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/code depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgobby_core_a_SOURCES) DIST_SOURCES = $(libgobby_core_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ noinst_LIBRARIES = libgobby-core.a libgobby_core_a_SOURCES = \ browser.cpp \ certificatemanager.cpp \ chatsessionview.cpp \ chattablabel.cpp \ closableframe.cpp \ connectionmanager.cpp \ credentialsgenerator.cpp \ documentinfostorage.cpp \ filechooser.cpp \ folder.cpp \ foldermanager.cpp \ header.cpp \ huebutton.cpp \ iconmanager.cpp \ nodewatch.cpp \ noteplugin.cpp \ preferences.cpp \ selfhoster.cpp \ server.cpp \ sessionuserview.cpp \ sessionview.cpp \ statusbar.cpp \ tablabel.cpp \ textsessionuserview.cpp \ textsessionview.cpp \ textundogrouping.cpp \ texttablabel.cpp \ titlebar.cpp \ userjoin.cpp \ userlist.cpp noinst_HEADERS = \ browser.hpp \ certificatemanager.hpp \ chatsessionview.hpp \ chattablabel.hpp \ closableframe.hpp \ connectionmanager.hpp \ credentialsgenerator.hpp \ documentinfostorage.hpp \ filechooser.hpp \ folder.hpp \ foldermanager.hpp \ header.hpp \ huebutton.hpp \ iconmanager.hpp \ nodewatch.hpp \ noteplugin.hpp \ preferences.hpp \ selfhoster.hpp \ server.hpp \ sessionuserview.hpp \ sessionview.hpp \ statusbar.hpp \ tablabel.hpp \ textsessionuserview.hpp \ textsessionview.hpp \ textundogrouping.hpp \ texttablabel.hpp \ titlebar.hpp \ userjoin.hpp \ userlist.hpp appicondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/gobby-0.5 # PRIVATE_ICONS_DIR is required by iconmanager.cpp to get access to the # private icons that are installed into prefix/share/gobby-0.5/icons instead # of prefix/share/icons. We also set PUBLIC_ICONS_DIR explicitely so that # we find the application icon if it is installed in a non-standard prefix. AM_CPPFLAGS = $(gobby_CFLAGS) $(unique_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code \ -DPRIVATE_ICONS_DIR=\""$(datadir)/gobby-0.5/icons"\" \ -DPUBLIC_ICONS_DIR=\""$(datadir)/icons"\" all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(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) --foreign code/core/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign code/core/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(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) libgobby-core.a: $(libgobby_core_a_OBJECTS) $(libgobby_core_a_DEPENDENCIES) $(EXTRA_libgobby_core_a_DEPENDENCIES) $(AM_V_at)-rm -f libgobby-core.a $(AM_V_AR)$(libgobby_core_a_AR) libgobby-core.a $(libgobby_core_a_OBJECTS) $(libgobby_core_a_LIBADD) $(AM_V_at)$(RANLIB) libgobby-core.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/browser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/certificatemanager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chatsessionview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chattablabel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closableframe.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connectionmanager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/credentialsgenerator.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/documentinfostorage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filechooser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/folder.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/foldermanager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/header.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/huebutton.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iconmanager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nodewatch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/noteplugin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/preferences.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/selfhoster.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/server.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sessionuserview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sessionview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/statusbar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tablabel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/textsessionuserview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/textsessionview.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/texttablabel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/textundogrouping.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/titlebar.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/userjoin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/userlist.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` 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) $(HEADERS) 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-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 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-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic 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: gobby-0.5.0/code/core/sessionview.cpp0000644000175000017500000000502212370427450014466 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "features.hpp" #include "core/sessionview.hpp" Gobby::SessionView::SessionView(InfSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname): m_session(session), m_title(title), m_path(path), m_hostname(hostname), m_info_box(false, 0), m_info_close_button_box(false, 6) { g_object_ref(m_session); m_info_label.set_selectable(true); m_info_label.set_line_wrap(true); m_info_label.show(); m_info_close_button.signal_clicked().connect( sigc::mem_fun(m_info_frame, &Gtk::Frame::hide)); m_info_close_button.show(); m_info_close_button_box.pack_end(m_info_close_button, Gtk::PACK_SHRINK); // Don't show info close button box by default m_info_box.pack_start(m_info_close_button_box, Gtk::PACK_SHRINK); m_info_box.pack_start(m_info_label, Gtk::PACK_SHRINK); m_info_box.set_border_width(6); m_info_box.show(); m_info_frame.set_shadow_type(Gtk::SHADOW_IN); m_info_frame.add(m_info_box); // Don't show infoframe by default pack_start(m_info_frame, Gtk::PACK_SHRINK); } Gobby::SessionView::~SessionView() { g_object_unref(m_session); //m_session = NULL; // TODO: Any reason to reset this? } void Gobby::SessionView::set_info(const Glib::ustring& info, bool closable) { m_info_label.set_text(info); if(closable) m_info_close_button_box.show(); else m_info_close_button_box.hide(); m_info_frame.show(); } void Gobby::SessionView::unset_info() { m_info_frame.hide(); } InfUser* Gobby::SessionView::get_active_user() const { return NULL; } void Gobby::SessionView::active_user_changed(InfUser* new_user) { m_signal_active_user_changed.emit(new_user); } gobby-0.5.0/code/core/iconmanager.hpp0000644000175000017500000000306412370427450014404 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_ICON_HPP_ #define _GOBBY_ICON_HPP_ #include #include #include #include #include "util/gtk-compat.hpp" namespace Gobby { class IconManager { public: static Gtk::StockID STOCK_SAVE_ALL; static Gtk::StockID STOCK_USERLIST; static Gtk::StockID STOCK_DOCLIST; static Gtk::StockID STOCK_CHAT; static Gtk::StockID STOCK_USER_COLOR_INDICATOR; IconManager(); protected: GtkCompat::IconSet m_is_save_all; GtkCompat::IconSet m_is_userlist; GtkCompat::IconSet m_is_doclist; GtkCompat::IconSet m_is_chat; GtkCompat::IconSet m_is_user_color_indicator; Glib::RefPtr m_icon_factory; }; } #endif // _GOBBY_ICON_HPP_ gobby-0.5.0/code/core/userlist.hpp0000644000175000017500000000705312370427450013775 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_USERLIST_HPP_ #define _GOBBY_USERLIST_HPP_ #include #include #include #include #include #include namespace Gobby { class UserList: public Gtk::VBox { public: typedef sigc::signal SignalUserActivated; UserList(InfUserTable* table); ~UserList(); void set_show_disconnected(bool show_disconnected); SignalUserActivated signal_user_activated() const { return m_signal_user_activated; } protected: InfUserTable* m_table; class Columns: public Gtk::TreeModelColumnRecord { public: Gtk::TreeModelColumn user; Gtk::TreeModelColumn > color; Gtk::TreeModelColumn notify_hue_handle; Gtk::TreeModelColumn notify_status_handle; Columns() { add(user); add(color); add(notify_hue_handle); add(notify_status_handle); } }; static void on_add_user_static(InfUserTable* user_table, InfUser* user, gpointer user_data) { static_cast(user_data)-> on_add_user(user); } static void on_notify_status_static(InfUser* user, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)-> on_notify_status(user); } static void on_notify_hue_static(InfUser* user, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)-> on_notify_hue(INF_TEXT_USER(user)); } bool visible_func(const Gtk::TreeIter& iter); void icon_cell_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter); void color_cell_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter); void name_cell_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter); int sort_func(const Gtk::TreeIter& iter1, const Gtk::TreeIter& iter2); void on_add_user(InfUser* user); void on_notify_status(InfUser* user); void on_notify_hue(InfTextUser* user); //void on_select_func(const Gtk::TreeIter& iter); void on_row_activated(const Gtk::TreePath& path, Gtk::TreeViewColumn* column); Gtk::TreeIter find_user_iter(InfUser* user); Columns m_columns; Glib::RefPtr m_store; Glib::RefPtr m_filter_model; Gtk::TreeView m_view; gulong m_add_user_handle; SignalUserActivated m_signal_user_activated; }; } #endif // _GOBBY_ICON_HPP_ gobby-0.5.0/code/core/folder.cpp0000644000175000017500000002041512370507717013373 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/folder.hpp" #include "core/textsessionuserview.hpp" #include "core/sessionuserview.hpp" #include "core/chattablabel.hpp" #include "core/texttablabel.hpp" #include "util/file.hpp" #include #include #include #include // For std::cerr #include namespace { class KeyMap { public: static const unsigned int nval = ~0u; KeyMap() { m_keyvals[GDK_KEY_0] = 9; m_keyvals[GDK_KEY_1] = 0; m_keyvals[GDK_KEY_2] = 1; m_keyvals[GDK_KEY_3] = 2; m_keyvals[GDK_KEY_4] = 3; m_keyvals[GDK_KEY_5] = 4; m_keyvals[GDK_KEY_6] = 5; m_keyvals[GDK_KEY_7] = 6; m_keyvals[GDK_KEY_8] = 7; m_keyvals[GDK_KEY_9] = 8; } unsigned int lookup(guint key) const { map_type::const_iterator iter = m_keyvals.find(key); if(iter == m_keyvals.end() ) return nval; return iter->second; } private: typedef std::map map_type; map_type m_keyvals; }; void record(InfTextSession* session, const Glib::ustring& title) { std::string dirname = Glib::build_filename( Glib::get_home_dir(), ".infinote-records"); std::string filename = Glib::build_filename( dirname, title + ".record.xml"); try { Gobby::create_directory_with_parents(dirname, 0700); InfAdoptedSessionRecord* record = inf_adopted_session_record_new( INF_ADOPTED_SESSION(session)); GError* error = NULL; inf_adopted_session_record_start_recording( record, filename.c_str(), &error); if(error != NULL) { g_object_unref(record); std::string what = error->message; g_error_free(error); throw std::runtime_error(what); } g_object_set_data_full( G_OBJECT(session), "GOBBY_SESSION_RECORD", record, g_object_unref); } catch(std::exception& ex) { std::cerr << "Failed to create record '" << filename << "': " << ex.what() << std::endl; } } } Gobby::Folder::Folder(bool hide_single_tab, Preferences& preferences, GtkSourceLanguageManager* lang_manager): m_hide_single_tab(hide_single_tab), m_preferences(preferences), m_lang_manager(lang_manager) { set_scrollable(true); if(hide_single_tab) set_show_tabs(false); } Gobby::Folder::~Folder() { // Remove all documents explicitely, so that all sessions are closed, // and records finished. while(get_n_pages()) remove_document(get_document(0)); } // TODO: Share common code of add_text_session and add_chat_session Gobby::TextSessionView& Gobby::Folder::add_text_session(InfTextSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname, const std::string& info_storage_key) { TextSessionView* view = Gtk::manage( new TextSessionView(session, title, path, hostname, info_storage_key, m_preferences, m_lang_manager)); view->show(); m_signal_document_added.emit(*view); TextSessionUserView* userview = Gtk::manage( new TextSessionUserView( *view, true, m_preferences.appearance.show_document_userlist, m_preferences.appearance.document_userlist_width)); userview->show(); TabLabel* tablabel = Gtk::manage(new TextTabLabel(*this, *view)); tablabel->signal_close_request().connect( sigc::bind( sigc::mem_fun(*this, &Folder::on_tab_close_request), sigc::ref(*view))); tablabel->show(); append_page(*userview, *tablabel); set_tab_reorderable(*userview, true); // Record the session, for debugging purposes: record(session, title); if(m_hide_single_tab && get_n_pages() > 1) set_show_tabs(true); return *view; } Gobby::ChatSessionView& Gobby::Folder::add_chat_session(InfChatSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname) { ChatSessionView* view = Gtk::manage( new ChatSessionView(session, title, path, hostname, m_preferences)); view->show(); m_signal_document_added.emit(*view); SessionUserView* userview = Gtk::manage( new SessionUserView( *view, false, m_preferences.appearance.show_chat_userlist, m_preferences.appearance.chat_userlist_width)); userview->show(); TabLabel* tablabel = Gtk::manage( new ChatTabLabel(*this, *view, path != "")); tablabel->signal_close_request().connect( sigc::bind( sigc::mem_fun(*this, &Folder::on_tab_close_request), sigc::ref(*view))); tablabel->show(); append_page(*userview, *tablabel); set_tab_reorderable(*userview, true); if(m_hide_single_tab && get_n_pages() > 1) set_show_tabs(true); return *view; } void Gobby::Folder::remove_document(SessionView& view) { m_signal_document_removed.emit(view); // Finish the record InfSession* session = view.get_session(); g_object_set_data(G_OBJECT(session), "GOBBY_SESSION_RECORD", NULL); g_object_ref(session); // This relies on the sessionuserview being the direct parent of // view - maybe we should make a loop here instead which searches // the folder in the widget hierarchy, to be more robust. remove_page(*view.get_parent()); g_object_unref(session); if(get_n_pages() == 0) m_signal_document_changed.emit(NULL); if(m_hide_single_tab && get_n_pages() <= 1) set_show_tabs(false); } Gobby::SessionView& Gobby::Folder::get_document(unsigned int n) const { const SessionUserView* child = static_cast(get_nth_page(n)); if(!child) throw std::logic_error( "Gobby::Folder::get_document: out of bounds"); return child->get_session_view(); } Gobby::SessionView* Gobby::Folder::lookup_document(InfSession* session) const { const unsigned int n_pages = get_n_pages(); for(unsigned int i = 0; i < n_pages; ++i) if(get_document(i).get_session() == session) return &get_document(i); return NULL; } Gobby::SessionView* Gobby::Folder::get_current_document() const { const SessionUserView* child = static_cast( get_nth_page(get_current_page())); if(!child) return NULL; return &child->get_session_view(); } void Gobby::Folder::switch_to_document(SessionView& document) { // Again, here we rely on document being the direct child of // the SessionUserView... set_current_page(page_num(*document.get_parent())); } void Gobby::Folder::on_tab_close_request(SessionView& view) { if(m_signal_document_close_request.emit(view)) remove_document(view); } void Gobby::Folder::on_switch_page(Gtk::Widget* page, guint page_num) { Notebook::on_switch_page(page, page_num); // SessionUserView& view = // *static_cast(get_nth_page(page_num)); SessionUserView& view = *static_cast(page); m_signal_document_changed.emit(&view.get_session_view()); } bool Gobby::Folder::on_key_press_event(GdkEventKey* event) { static KeyMap keymap; if( (event->state & GDK_MOD1_MASK) == GDK_MOD1_MASK) { unsigned int page = keymap.lookup(event->keyval); if(page != KeyMap::nval) { set_current_page(page); return true; } } if( (event->state & (GDK_CONTROL_MASK | GDK_MOD1_MASK)) == (GDK_CONTROL_MASK | GDK_MOD1_MASK)) { int offset = 0; if(event->keyval == GDK_KEY_Page_Up) offset = -1; if(event->keyval == GDK_KEY_Page_Down) offset = 1; if(offset != 0) { int res = get_current_page() + offset + get_n_pages(); set_current_page(res % get_n_pages() ); return true; } } return false; } gobby-0.5.0/code/core/sessionuserview.cpp0000644000175000017500000000727412370512270015373 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/sessionuserview.hpp" #include "core/iconmanager.hpp" #include "core/closableframe.hpp" #include "util/i18n.hpp" // TODO: Consider using a single user list for all SessionViews, reparenting // into the current SessionUserView's frame. Keep dummy widgets in other // SessionUserViews so text does not resize. // Or, maybe more favorable, just put the userlist outside of the notebook, // but keep the notebook tabs on top of the userlist. Gobby::SessionUserView::SessionUserView(SessionView& view, bool show_disconnected, Preferences::Option& opt_view, Preferences::Option& w): m_view(view), m_userlist_width(w), m_userlist(inf_session_get_user_table(view.get_session())) { m_userlist.show(); m_userlist.set_show_disconnected(show_disconnected); Gtk::Frame* frame = Gtk::manage(new ClosableFrame( _("User List"), IconManager::STOCK_USERLIST, opt_view)); frame->set_shadow_type(Gtk::SHADOW_IN); frame->add(m_userlist); // frame manages visibility itself pack1(view, true, false); pack2(*frame, false, false); } void Gobby::SessionUserView::on_size_allocate(Gtk::Allocation& allocation) { Gtk::HPaned::on_size_allocate(allocation); // Setup initial paned position. We can't do this simply every time // on_size_allocate() is called since this would lead to an endless // loop somehow when the userlist width is changed forcefully // (for example by a m_view.set_info() requiring much width). if(!m_doc_userlist_width_changed_connection.connected()) { Glib::SignalProxyProperty proxy = property_position().signal_changed(); m_doc_userlist_width_changed_connection = proxy.connect(sigc::mem_fun( *this, &SessionUserView:: on_doc_userlist_width_changed)); Preferences::Option& option = m_userlist_width; m_pref_userlist_width_changed_connection = option.signal_changed().connect(sigc::mem_fun( *this, &SessionUserView:: on_pref_userlist_width_changed)); int desired_position = get_width() - m_userlist_width; desired_position = std::min( desired_position, property_max_position()); if(get_position() != desired_position) set_position(desired_position); } } void Gobby::SessionUserView::on_doc_userlist_width_changed() { unsigned int userlist_width = get_width() - get_position(); if(m_userlist_width != userlist_width) { m_pref_userlist_width_changed_connection.block(); m_userlist_width = userlist_width; m_pref_userlist_width_changed_connection.unblock(); } } void Gobby::SessionUserView::on_pref_userlist_width_changed() { int position = get_width() - m_userlist_width; if(get_position() != position) { m_doc_userlist_width_changed_connection.block(); set_position(position); m_doc_userlist_width_changed_connection.unblock(); } } gobby-0.5.0/code/core/closableframe.cpp0000644000175000017500000000476012370427450014717 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/closableframe.hpp" #include "util/closebutton.hpp" #include "util/gtk-compat.hpp" #include #include Gobby::ClosableFrame::ClosableFrame(const Glib::ustring& title, const Gtk::StockID& stock_id, Preferences::Option& option): m_option(option), m_box(false, 6), m_allow_visible(true) { CloseButton* button = Gtk::manage(new CloseButton); button->signal_clicked().connect( sigc::mem_fun(*this, &ClosableFrame::on_clicked)); m_option.signal_changed().connect( sigc::mem_fun(*this, &ClosableFrame::on_option)); button->show(); Gtk::Image* image = Gtk::manage( new Gtk::Image(stock_id, Gtk::ICON_SIZE_MENU)); image->show(); Gtk::Label* label_title = Gtk::manage( new Gtk::Label(title, GtkCompat::ALIGN_LEFT)); label_title->show(); Gtk::HBox* hbox = Gtk::manage(new Gtk::HBox(false, 6)); hbox->pack_start(*image, Gtk::PACK_SHRINK); hbox->pack_start(*label_title, Gtk::PACK_SHRINK); hbox->pack_end(*button, Gtk::PACK_SHRINK); hbox->show(); m_box.set_border_width(6); m_box.pack_start(*hbox, Gtk::PACK_SHRINK); m_box.show(); add(m_box); on_option(); } void Gobby::ClosableFrame::set_allow_visible(bool allow_visible) { m_allow_visible = allow_visible; if(m_option && m_allow_visible) show(); else hide(); } void Gobby::ClosableFrame::on_add(Gtk::Widget* widget) { if(widget == &m_box) Gtk::Frame::on_add(widget); else m_box.pack_start(*widget, Gtk::PACK_EXPAND_WIDGET); } void Gobby::ClosableFrame::on_clicked() { m_option = false; } void Gobby::ClosableFrame::on_option() { if(m_option && m_allow_visible) show(); else hide(); } gobby-0.5.0/code/core/selfhoster.cpp0000644000175000017500000002146412370427450014276 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/selfhoster.hpp" #include "util/i18n.hpp" #include Gobby::SelfHoster::SelfHoster(InfIo* io, InfCommunicationManager* communication_manager, InfLocalPublisher* publisher, InfSaslContext* sasl_context, StatusBar& status_bar, CertificateManager& cert_manager, const Preferences& preferences): m_sasl_context(sasl_context), m_status_bar(status_bar), m_cert_manager(cert_manager), m_preferences(preferences), m_dh_params_loaded(false), m_info_handle(status_bar.invalid_handle()), m_dh_params_message_handle(status_bar.invalid_handle()), m_directory(infd_directory_new(io, NULL, communication_manager)), m_server(io, publisher) { inf_sasl_context_ref(m_sasl_context); if(m_preferences.user.keep_local_documents) { const std::string directory = m_preferences.user.host_directory; InfdFilesystemStorage* storage = infd_filesystem_storage_new(directory.c_str()); g_object_set(G_OBJECT(m_directory), "storage", storage, NULL); g_object_unref(storage); } InfdServerPool* pool = infd_server_pool_new(m_directory); m_server.set_pool(pool); g_object_unref(pool); m_preferences.user.require_password.signal_changed().connect( sigc::mem_fun( *this, &SelfHoster::on_require_password_changed)); /*m_preferences.user.password.signal_changed().connect( sigc::mem_fun(*this, &SelfHoster::on_password));*/ m_preferences.user.allow_remote_access.signal_changed().connect( sigc::mem_fun(*this, &SelfHoster::apply_preferences)); m_preferences.user.port.signal_changed().connect( sigc::mem_fun(*this, &SelfHoster::apply_preferences)); m_preferences.user.keep_local_documents.signal_changed().connect( sigc::mem_fun(*this, &SelfHoster::apply_preferences)); m_preferences.user.host_directory.signal_changed().connect( sigc::mem_fun(*this, &SelfHoster::apply_preferences)); m_preferences.security.authentication_enabled.signal_changed(). connect(sigc::mem_fun(*this, &SelfHoster::apply_preferences)); m_preferences.security.policy.signal_changed().connect( sigc::mem_fun(*this, &SelfHoster::apply_preferences)); m_cert_manager.signal_credentials_changed().connect( sigc::mem_fun(*this, &SelfHoster::apply_preferences)); apply_preferences(); } Gobby::SelfHoster::~SelfHoster() { g_object_unref(m_directory); inf_sasl_context_unref(m_sasl_context); } bool Gobby::SelfHoster::ensure_dh_params() { // If they are loaded already: perfect. Note this does not mean we // actually have them, this flag is also set if we attempted to // generate the parameters but the generation failed. if(m_dh_params_loaded) return true; // Load from certificate manager, if available if(m_cert_manager.get_dh_params() != NULL) { m_dh_params_loaded = true; return true; } // Otherwise go and create a new set of parameters if(m_dh_params_handle.get() == NULL) { m_dh_params_message_handle = m_status_bar.add_info_message( _("Generating 2048-bit Diffie-Hellman " "parameters...")); m_dh_params_handle = create_dh_params( 2048, sigc::mem_fun(*this, &SelfHoster::on_dh_params_done)); } return false; } void Gobby::SelfHoster::on_dh_params_done(const DHParamsGeneratorHandle* hndl, gnutls_dh_params_t dh_params, const GError* error) { g_assert(m_dh_params_message_handle != m_status_bar.invalid_handle()); m_status_bar.remove_message(m_dh_params_message_handle); // Set this flag also when an error occured, to prevent trying to // re-generate the parameters all the time. m_dh_params_loaded = true; if(dh_params != NULL) { // Set the DH parameters in the certificate manager: this // will cause a credentials_changed notification, and we'll // retry starting the server. m_cert_manager.set_dh_params(dh_params); } else { m_status_bar.add_error_message( _("Failed to generate Diffie-Hellman parameters"), Glib::ustring::compose( _("This means that Perfect Forward Secrecy " "(PFS) is not available. Restart Gobby to " "re-try generating the parameters. The " "specific error was:\n\n%1"), error->message)); } } void Gobby::SelfHoster::directory_foreach_func_close_static( InfXmlConnection* connection, gpointer user_data) { inf_xml_connection_close(connection); } void Gobby::SelfHoster::directory_foreach_func_set_sasl_context_static( InfXmlConnection* connection, gpointer user_data) { g_assert(INF_IS_XMPP_CONNECTION(connection)); SelfHoster* hoster = static_cast(user_data); inf_xmpp_connection_reset_sasl_authentication( INF_XMPP_CONNECTION(connection), hoster->m_sasl_context, hoster->get_sasl_mechanisms()); } const char* Gobby::SelfHoster::get_sasl_mechanisms() const { if(m_preferences.user.require_password) return "PLAIN"; else return "ANONYMOUS"; } void Gobby::SelfHoster::on_require_password_changed() { // Update SASL context and mechanisms for new connections: m_server.set_sasl_context(m_sasl_context, get_sasl_mechanisms()); // Also update the SASL context for all existing connections. This is // important, so that the new password requirement setting also // affects already connected but not yet authorized clients. infd_directory_foreach_connection( m_directory, directory_foreach_func_set_sasl_context_static, this); } void Gobby::SelfHoster::apply_preferences() { // Update directory storage if(m_preferences.user.keep_local_documents) { InfdStorage* storage = infd_directory_get_storage(m_directory); g_assert(storage == NULL || INFD_IS_FILESYSTEM_STORAGE(storage)); InfdFilesystemStorage* fs_storage = INFD_FILESYSTEM_STORAGE(storage); const std::string new_directory = m_preferences.user.host_directory; bool set_new_storage = true; if(fs_storage != NULL) { gchar* root_directory; g_object_get( G_OBJECT(fs_storage), "root-directory", &root_directory, NULL); if(strcmp(root_directory, new_directory.c_str()) == 0) set_new_storage = false; g_free(root_directory); } if(set_new_storage) { fs_storage = infd_filesystem_storage_new( new_directory.c_str()); g_object_set( G_OBJECT(m_directory), "storage", fs_storage, NULL); g_object_unref(fs_storage); } } else { if(infd_directory_get_storage(m_directory) != NULL) { g_object_set( G_OBJECT(m_directory), "storage", NULL, NULL); } } // Remove old statusbar message, if any if(m_info_handle != m_status_bar.invalid_handle()) { m_status_bar.remove_message(m_info_handle); m_info_handle = m_status_bar.invalid_handle(); } // Close server and all connections if no access is required if(!m_preferences.user.allow_remote_access) { infd_directory_foreach_connection( m_directory, directory_foreach_func_close_static, this); if(m_server.is_open()) m_server.close(); return; } // Okay, we want to share our documents, so let's try to start a // server for it. // Make sure TLS credentials are available. if(m_preferences.security.policy != INF_XMPP_CONNECTION_SECURITY_ONLY_UNSECURED && (m_cert_manager.get_private_key() == NULL || m_cert_manager.get_certificates() == NULL)) { m_info_handle = m_status_bar.add_info_message( _("In order to start sharing your documents, " "choose a private key and certificate or " "create a new pair in the preferences")); return; } // Make sure we have DH parameters if(!ensure_dh_params()) return; // Okay, go and open a server. If the server is already open the // command below will only change the port and/or security policy. try { m_server.open(m_preferences.user.port, m_preferences.security.policy, m_cert_manager.get_credentials(), m_sasl_context, get_sasl_mechanisms()); } catch(const std::exception& ex) { m_status_bar.add_error_message(_("Failed to share documents"), ex.what()); return; } } gobby-0.5.0/code/core/userjoin.hpp0000644000175000017500000000624312370560344013761 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_USER_JOIN_HPP_ #define _GOBBY_USER_JOIN_HPP_ #include "core/nodewatch.hpp" #include #include #include #include #include #include #include #include #include namespace Gobby { class UserJoin: public sigc::trackable { public: class ParameterProvider { public: ParameterProvider() {} virtual ~ParameterProvider() {} virtual std::vector get_user_join_parameters() = 0; }; typedef sigc::signal SignalFinished; UserJoin(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, std::auto_ptr param_provider); ~UserJoin(); InfSessionProxy* get_proxy() const { return m_proxy; } // If both are NULL, the user join is still in progress: InfUser* get_user() const { return m_user; } const GError* get_error() const { return m_error; } SignalFinished signal_finished() const { return m_signal_finished; } private: static void on_synchronization_complete_static(InfSession* session, InfXmlConnection* conn, gpointer user_data) { static_cast(user_data)-> on_synchronization_complete(); } static void on_user_join_finished_static(InfRequest* request, const InfRequestResult* res, const GError* error, gpointer user_data) { InfUser* user = NULL; if(error == NULL) inf_request_result_get_join_user(res, NULL, &user); static_cast(user_data)-> on_user_join_finished(user, error); } void on_synchronization_complete(); void on_user_join_finished(InfUser* user, const GError* error); void attempt_user_join(); void user_join_complete(InfUser* user, const GError* error); NodeWatch m_node; InfSessionProxy* m_proxy; std::auto_ptr m_param_provider; gulong m_synchronization_complete_handler; InfRequest* m_request; guint m_retry_index; InfUser* m_user; GError* m_error; SignalFinished m_signal_finished; }; } #endif // _GOBBY_USER_JOIN_HPP_ gobby-0.5.0/code/core/statusbar.hpp0000644000175000017500000000714212370427450014132 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_STATUSBAR_HPP_ #define _GOBBY_STATUSBAR_HPP_ #include "folder.hpp" #include #include #include #include #include /* ARGH!!! */ #ifdef G_OS_WIN32 # ifdef ERROR # undef ERROR # endif #endif namespace Gobby { class StatusBar: public Gtk::HBox { protected: class Message; typedef std::list MessageList; public: enum MessageType { INFO, ERROR }; typedef MessageList::iterator MessageHandle; StatusBar(Gtk::Window& window, const Folder& folder, const Preferences& preferences); ~StatusBar(); MessageHandle add_info_message(const Glib::ustring& message, unsigned int timeout = 0); // This does not return a message handle because users dispose of // messages by clicking on them. void add_error_message(const Glib::ustring& brief_desc, const Glib::ustring& detailed_desc, unsigned int timeout = 0); void remove_message(const MessageHandle& handle); void hide_message(const MessageHandle& handle); MessageHandle invalid_handle(); protected: MessageHandle add_message(MessageType type, const Glib::ustring& message, const Glib::ustring& dialog_message, unsigned int timeout = 0); static void on_mark_set_static(GtkTextBuffer* buffer, GtkTextIter* location, GtkTextMark* mark, gpointer user_data) { static_cast(user_data)->on_mark_set(mark); } static void on_changed_static(GtkTextBuffer* buffer, gpointer user_data) { static_cast(user_data)->on_changed(); } static void on_toggled_overwrite_static(GtkTextView* buffer, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)->on_toggled_overwrite(); } void on_message_clicked(GdkEventButton* button, const MessageHandle& handle); void on_document_removed(SessionView& view); void on_document_changed(SessionView* view); void on_view_changed(); void on_mark_set(GtkTextMark* mark); void on_toggled_overwrite(); void on_changed(); bool on_window_state_event(GdkEventWindowState* event); void update_pos_display(); const Folder& m_folder; const Preferences& m_preferences; MessageList m_list; unsigned int m_visible_messages; Gtk::Statusbar m_bar_position; TextSessionView* m_current_view; gulong m_mark_set_handler; gulong m_changed_handler; gulong m_toverwrite_handler; guint m_position_context_id; }; } #endif // _GOBBY_STATUSBAR_HPP_ gobby-0.5.0/code/core/credentialsgenerator.cpp0000644000175000017500000001154212370427450016320 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/credentialsgenerator.hpp" #include #include #include namespace { class Keygen: public Gobby::AsyncOperation { public: Keygen(gnutls_pk_algorithm_t algo, unsigned int bits, const Gobby::SlotKeyGeneratorDone& slot_done): m_algo(algo), m_bits(bits), m_slot_done(slot_done), m_key(NULL), m_error(NULL) { } ~Keygen() { if(m_key != NULL) gnutls_x509_privkey_deinit(m_key); if(m_error != NULL) g_error_free(m_error); } protected: virtual void run() { m_key = inf_cert_util_create_private_key( m_algo, m_bits, &m_error); } virtual void finish() { if(m_error != NULL) { m_slot_done(get_handle(), NULL, m_error); } else { gnutls_x509_privkey_t key = m_key; m_key = NULL; m_slot_done(get_handle(), key, NULL); } } private: const gnutls_pk_algorithm_t m_algo; const unsigned int m_bits; const Gobby::SlotKeyGeneratorDone m_slot_done; gnutls_x509_privkey_t m_key; GError* m_error; }; class Certgen: public Gobby::AsyncOperation { public: Certgen(gnutls_x509_privkey_t key, const Gobby::SlotCertificateGeneratorDone& slot_done): m_key(key), m_slot_done(slot_done), m_cert(NULL), m_error(NULL) { } ~Certgen() { if(m_cert != NULL) gnutls_x509_crt_deinit(m_cert); if(m_error != NULL) g_error_free(m_error); } protected: virtual void run() { InfCertUtilDescription desc; desc.validity = 365 * 24 * 3600; desc.dn_common_name = g_get_user_name(); desc.san_dnsname = g_get_host_name(); m_cert = inf_cert_util_create_self_signed_certificate( m_key, &desc, &m_error); } virtual void finish() { if(m_error != NULL) { m_slot_done(get_handle(), NULL, m_error); } else { gnutls_x509_crt_t cert = m_cert; m_cert = NULL; m_slot_done(get_handle(), cert, NULL); } } private: const gnutls_x509_privkey_t m_key; const Gobby::SlotCertificateGeneratorDone m_slot_done; gnutls_x509_crt_t m_cert; GError* m_error; }; class DHgen: public Gobby::AsyncOperation { public: DHgen(unsigned int bits, const Gobby::SlotDHParamsGeneratorDone& slot_done): m_bits(bits), m_slot_done(slot_done), m_dh_params(NULL), m_error(NULL) { } ~DHgen() { if(m_dh_params != NULL) gnutls_dh_params_deinit(m_dh_params); if(m_error != NULL) g_error_free(m_error); } protected: virtual void run() { // TODO: Actually use the bits number here m_dh_params = inf_cert_util_create_dh_params(&m_error); } virtual void finish() { if(m_error != NULL) { m_slot_done(get_handle(), NULL, m_error); } else { gnutls_dh_params_t dh_params = m_dh_params; m_dh_params = NULL; m_slot_done(get_handle(), dh_params, NULL); } } private: const unsigned int m_bits; const Gobby::SlotDHParamsGeneratorDone m_slot_done; gnutls_dh_params_t m_dh_params; GError* m_error; }; } std::auto_ptr Gobby::create_key(gnutls_pk_algorithm_t algo, unsigned int bits, const SlotKeyGeneratorDone& done_slot) { std::auto_ptr operation( new Keygen(algo, bits, done_slot)); return AsyncOperation::start(operation); } std::auto_ptr Gobby::create_self_signed_certificate( gnutls_x509_privkey_t key, const SlotCertificateGeneratorDone& done_slot) { // TODO: Does this really need to be asynchronous? I don't think here // are any blocking calls involved... // TODO: We should make a copy of the key, so that the caller can // delete theirs. std::auto_ptr operation(new Certgen(key, done_slot)); return AsyncOperation::start(operation); } std::auto_ptr Gobby::create_dh_params(unsigned int bits, const SlotDHParamsGeneratorDone& done_slot) { std::auto_ptr operation(new DHgen(bits, done_slot)); return AsyncOperation::start(operation); } gobby-0.5.0/code/core/header.hpp0000644000175000017500000001150312370466747013362 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_HEADER_HPP_ #define _GOBBY_HEADER_HPP_ #include #include #include #include #include #include #include #include #include "preferences.hpp" namespace Gobby { class Header: public Gtk::VBox { public: class Error: public Glib::Error { public: enum Code { MENUBAR_MISSING, TOOLBAR_MISSING }; Error(Code error_code, const Glib::ustring& error_message); Code code() const; }; class LanguageAction: public Gtk::RadioAction { protected: LanguageAction(GtkSourceLanguage* language, Gtk::RadioAction::Group& group); public: static Glib::RefPtr create(GtkSourceLanguage* language, Gtk::RadioAction::Group& group); GtkSourceLanguage* get_language() const { return m_language; } private: GtkSourceLanguage* m_language; }; typedef std::list > LanguageList; typedef std::map LanguageMap; Header(Preferences& preferences, GtkSourceLanguageManager* lang_mgr); Glib::RefPtr get_accel_group(); Glib::RefPtr get_accel_group() const; Gtk::MenuBar& get_menubar(); Gtk::Toolbar& get_toolbar(); Glib::RefPtr lookup_language_action(GtkSourceLanguage* language); protected: Preferences& m_preferences; Gtk::RadioAction::Group m_highlight_group; const Glib::RefPtr m_ui_manager; Gtk::MenuBar* m_menubar; Gtk::Toolbar* m_toolbar; public: const Glib::RefPtr group_file; const Glib::RefPtr group_edit; const Glib::RefPtr group_view; const Glib::RefPtr group_help; const Glib::RefPtr action_file; const Glib::RefPtr action_file_new; const Glib::RefPtr action_file_open; const Glib::RefPtr action_file_open_location; const Glib::RefPtr action_file_save; const Glib::RefPtr action_file_save_as; const Glib::RefPtr action_file_save_all; const Glib::RefPtr action_file_export_html; const Glib::RefPtr action_file_connect; const Glib::RefPtr action_file_close; const Glib::RefPtr action_file_quit; const Glib::RefPtr action_edit; const Glib::RefPtr action_edit_undo; const Glib::RefPtr action_edit_redo; const Glib::RefPtr action_edit_cut; const Glib::RefPtr action_edit_copy; const Glib::RefPtr action_edit_paste; const Glib::RefPtr action_edit_find; const Glib::RefPtr action_edit_find_next; const Glib::RefPtr action_edit_find_prev; const Glib::RefPtr action_edit_find_replace; const Glib::RefPtr action_edit_goto_line; const Glib::RefPtr action_edit_preferences; const Glib::RefPtr action_view; const Glib::RefPtr action_view_hide_user_colors; const Glib::RefPtr action_view_fullscreen; const Glib::RefPtr action_view_zoom_in; const Glib::RefPtr action_view_zoom_out; const Glib::RefPtr action_view_toolbar; const Glib::RefPtr action_view_statusbar; const Glib::RefPtr action_view_browser; const Glib::RefPtr action_view_chat; const Glib::RefPtr action_view_document_userlist; const Glib::RefPtr action_view_chat_userlist; const Glib::RefPtr action_view_highlight_mode; const Glib::RefPtr action_view_highlight_none; const LanguageMap action_view_highlight_languages; const Glib::RefPtr action_help; const Glib::RefPtr action_help_contents; const Glib::RefPtr action_help_about; }; } #endif // _GOBBY_HEADER_HPP_ gobby-0.5.0/code/core/tablabel.hpp0000644000175000017500000000476212370427450013675 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_TABLABEL_HPP_ #define _GOBBY_TABLABEL_HPP_ #include "core/sessionview.hpp" #include #include namespace Gobby { class Folder; class TabLabel: public Gtk::HBox { public: typedef Glib::SignalProxy0 SignalCloseRequest; TabLabel(Folder& folder, SessionView& view, Gtk::StockID active_icon); virtual ~TabLabel(); SignalCloseRequest signal_close_request() { return m_button.signal_clicked(); } protected: static void on_notify_status_static(GObject* object, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)->on_notify_status(); } static void on_notify_subscription_group_static(GObject* object, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)-> on_notify_subscription_group(); } void on_folder_document_changed(SessionView* view); // Can be overriden by derived classes: virtual void on_active_user_changed(InfUser* user); virtual void on_notify_status(); virtual void on_notify_subscription_group(); virtual void on_activate(); // To be called by derived classes: void set_changed(); Folder& m_folder; SessionView& m_view; Gtk::Image m_icon; Gtk::Label m_title; Gtk::HBox m_extra; CloseButton m_button; bool m_changed; private: void update_icon(); void update_color(); Gtk::StockID m_active_icon; // Whether the document was changed since it has been active. gulong m_notify_status_handle; gulong m_notify_subscription_group_handle; }; } #endif // _GOBBY_TABLABEL_HPP_ gobby-0.5.0/code/core/filechooser.hpp0000644000175000017500000000304412370427450014421 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_CHOOSER_HPP_ #define _GOBBY_FILE_CHOOSER_HPP_ #include #include namespace Gobby { // This class manages a common "current folder uri" for file chooser // dialogs. class FileChooser { public: class Dialog: public Gtk::FileChooserDialog { public: Dialog(Gobby::FileChooser& chooser, Gtk::Window& parent, const Glib::ustring& title, Gtk::FileChooserAction action); ~Dialog(); protected: Gobby::FileChooser& m_chooser; }; FileChooser(); const std::string& get_current_folder_uri() const; void set_current_folder_uri(const std::string& uri); private: std::string m_current_folder_uri; }; } #endif // _GOBBY_FILE_CHOOSER_HPP_ gobby-0.5.0/code/core/chattablabel.hpp0000644000175000017500000000315612370427450014531 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CHATTABLABEL_HPP_ #define _GOBBY_CHATTABLABEL_HPP_ #include "core/chatsessionview.hpp" #include "core/tablabel.hpp" namespace Gobby { class ChatTabLabel: public TabLabel { public: ChatTabLabel(Folder& folder, ChatSessionView& view, bool always_show_close_button); ~ChatTabLabel(); protected: static void on_add_message_static(InfChatBuffer* buffer, InfChatBufferMessage* message, gpointer user_data) { static_cast(user_data)-> on_changed(message->user); } virtual void on_notify_subscription_group(); // override void on_changed(InfUser* author); private: const bool m_always_show_close_button; gulong m_add_message_handle; }; } #endif // _GOBBY_CHATTABLABEL_HPP_ gobby-0.5.0/code/core/textundogrouping.hpp0000644000175000017500000000367012370427450015551 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_TEXTUNDOGROUPING_HPP_ #define _GOBBY_TEXTUNDOGROUPING_HPP_ #include #include #include #include namespace Gobby { class TextUndoGrouping { public: TextUndoGrouping(InfAdoptedAlgorithm* algorithm, InfTextUser* user, GtkTextBuffer* buffer); ~TextUndoGrouping(); guint get_undo_size() const; guint get_redo_size() const; protected: static void on_begin_user_action_static(GtkTextBuffer* buffer, gpointer user_data) { static_cast(user_data)-> on_begin_user_action(); } static void on_end_user_action_static(GtkTextBuffer* buffer, gpointer user_data) { static_cast(user_data)-> on_end_user_action(); } void on_begin_user_action(); void on_end_user_action(); GtkTextBuffer* m_buffer; InfTextUndoGrouping* m_grouping; gulong m_begin_user_action_handle; gulong m_end_user_action_handle; }; } #endif // _GOBBY_TEXTSESSIONVIEW_HPP_ gobby-0.5.0/code/core/userlist.cpp0000644000175000017500000002455412370427450013775 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/userlist.hpp" #include "core/iconmanager.hpp" #include "util/i18n.hpp" #include "util/color.hpp" #include "util/gtk-compat.hpp" #include #include #include namespace { typedef sigc::slot ForeachUserFunc; void foreach_user_ctor_func(InfUser* user, gpointer user_data) { (*static_cast(user_data))(user); } Glib::RefPtr generate_user_color_pixbuf(Gtk::Widget& w, gdouble hue) { Gtk::StockID id = Gobby::IconManager::STOCK_USER_COLOR_INDICATOR; Glib::RefPtr pixbuf = Gobby::GtkCompat::render_icon( w, id, Gtk::ICON_SIZE_MENU); // pixbuf is shared, though we want to mess with it here pixbuf = pixbuf->copy(); for(int y = 0; y < pixbuf->get_height(); ++y) { for(int x = 0; x < pixbuf->get_width(); ++x) { guint8* pixels = pixbuf->get_pixels(); guint8* pixel = pixels + y * pixbuf->get_rowstride() + x * pixbuf->get_n_channels(); double r = pixel[0]/255.0; double g = pixel[1]/255.0; double b = pixel[2]/255.0; Gobby::rgb_to_hsv(r,g,b); r = hue; Gobby::hsv_to_rgb(r,g,b); pixel[0] = static_cast(r * 255.0 + 0.5); pixel[1] = static_cast(g * 255.0 + 0.5); pixel[2] = static_cast(b * 255.0 + 0.5); } } return pixbuf; } } Gobby::UserList::UserList(InfUserTable* table): m_table(table), m_store(Gtk::ListStore::create(m_columns)), m_view(m_store) { m_store->set_sort_func(m_columns.user, sigc::mem_fun(*this, &UserList::sort_func)); m_store->set_sort_column(m_columns.user, Gtk::SORT_ASCENDING); m_add_user_handle = g_signal_connect( G_OBJECT(table), "add-user", G_CALLBACK(on_add_user_static), this); ForeachUserFunc slot(sigc::mem_fun(*this, &UserList::on_add_user)); inf_user_table_foreach_user(table, foreach_user_ctor_func, &slot); Gtk::CellRendererPixbuf* icon_renderer = Gtk::manage(new Gtk::CellRendererPixbuf); Gtk::CellRendererPixbuf* color_renderer = Gtk::manage(new Gtk::CellRendererPixbuf); Gtk::CellRendererText* name_renderer = Gtk::manage(new Gtk::CellRendererText); Gtk::TreeViewColumn* column = Gtk::manage(new Gtk::TreeViewColumn(_("Users"))); column->pack_start(*icon_renderer, false); column->pack_start(*color_renderer, false); column->pack_start(*name_renderer, true); column->set_cell_data_func( *icon_renderer, sigc::mem_fun(*this, &UserList::icon_cell_data_func)); column->set_cell_data_func( *color_renderer, sigc::mem_fun(*this, &UserList::color_cell_data_func)); column->set_cell_data_func( *name_renderer, sigc::mem_fun(*this, &UserList::name_cell_data_func)); m_view.signal_row_activated().connect( sigc::mem_fun(*this, &UserList::on_row_activated)); column->set_spacing(6); m_view.append_column(*column); m_view.get_selection()->set_mode(Gtk::SELECTION_NONE); m_view.set_headers_visible(false); m_view.show(); Gtk::ScrolledWindow* scroll = Gtk::manage(new Gtk::ScrolledWindow); scroll->set_shadow_type(Gtk::SHADOW_IN); scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); scroll->add(m_view); scroll->show(); pack_start(*scroll, Gtk::PACK_EXPAND_WIDGET); } Gobby::UserList::~UserList() { g_signal_handler_disconnect(G_OBJECT(m_table), m_add_user_handle); m_filter_model.reset(); const Gtk::TreeModel::Children& children = m_store->children(); for(Gtk::TreeIter iter = children.begin(); iter != children.end(); ++ iter) { InfUser* user = (*iter)[m_columns.user]; gulong notify_hue_handle = (*iter)[m_columns.notify_hue_handle]; gulong notify_status_handle = (*iter)[m_columns.notify_status_handle]; if(notify_hue_handle > 0) g_signal_handler_disconnect(G_OBJECT(user), notify_hue_handle); g_signal_handler_disconnect(G_OBJECT(user), notify_status_handle); } } void Gobby::UserList::set_show_disconnected(bool show_disconnected) { if(show_disconnected) { m_filter_model.reset(); m_view.set_model(m_store); } else { m_filter_model = Gtk::TreeModelFilter::create(m_store); m_view.set_model(m_filter_model); m_filter_model->set_visible_func( sigc::mem_fun(*this, &UserList::visible_func)); } } bool Gobby::UserList::visible_func(const Gtk::TreeIter& iter) { InfUser* user = (*iter)[m_columns.user]; // Can happen after creation of the node when the user object has // not yet been set if(user == NULL) return false; return inf_user_get_status(user) != INF_USER_UNAVAILABLE; } void Gobby::UserList::icon_cell_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter) { Gtk::CellRendererPixbuf* pixbuf_renderer = dynamic_cast(renderer); g_assert(pixbuf_renderer); pixbuf_renderer->property_stock_size() = Gtk::ICON_SIZE_MENU; InfUser* user = (*iter)[m_columns.user]; if(user == NULL) { // Can happen after creation of the node when the user // object has not yet been set pixbuf_renderer->property_visible() = false; } else { pixbuf_renderer->property_visible() = true; switch(inf_user_get_status(user)) { case INF_USER_ACTIVE: case INF_USER_INACTIVE: pixbuf_renderer->property_stock_id() = Gtk::Stock::CONNECT.id; break; case INF_USER_UNAVAILABLE: pixbuf_renderer->property_stock_id() = Gtk::Stock::DISCONNECT.id; break; default: g_assert_not_reached(); break; } } } void Gobby::UserList::color_cell_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter) { Gtk::CellRendererPixbuf* pixbuf_renderer = dynamic_cast(renderer); g_assert(pixbuf_renderer); Glib::RefPtr pixbuf = (*iter)[m_columns.color]; if(pixbuf) { pixbuf_renderer->property_pixbuf() = pixbuf; pixbuf_renderer->property_visible() = true; } else { pixbuf_renderer->property_visible() = false; } } void Gobby::UserList::name_cell_data_func(Gtk::CellRenderer* renderer, const Gtk::TreeIter& iter) { Gtk::CellRendererText* text_renderer = dynamic_cast(renderer); g_assert(text_renderer); InfUser* user = (*iter)[m_columns.user]; if(user == NULL) { // Can happen after creation of the node when the user // object has not yet been set text_renderer->property_visible() = false; } else { switch(inf_user_get_status(INF_USER(user))) { case INF_USER_ACTIVE: text_renderer->property_foreground_set() = false; break; case INF_USER_INACTIVE: text_renderer->property_foreground() = "#606060"; break; case INF_USER_UNAVAILABLE: text_renderer->property_foreground() = "#a0a0a0"; break; } text_renderer->property_visible() = true; text_renderer->property_text() = inf_user_get_name(user); } } int Gobby::UserList::sort_func(const Gtk::TreeIter& iter1, const Gtk::TreeIter& iter2) { InfUser* user1 = (*iter1)[m_columns.user]; InfUser* user2 = (*iter2)[m_columns.user]; bool available1 = inf_user_get_status(user1) != INF_USER_UNAVAILABLE; bool available2 = inf_user_get_status(user2) != INF_USER_UNAVAILABLE; if(available1 != available2) { if(!available1) return 1; return -1; } else { // We might want to cache collate keys in the ListStore if // this turns out to be a performance problem: return g_utf8_collate(inf_user_get_name(user1), inf_user_get_name(user2)); } } void Gobby::UserList::on_add_user(InfUser* user) { g_assert(find_user_iter(user) == m_store->children().end()); Gtk::TreeIter iter = m_store->append(); (*iter)[m_columns.user] = user; (*iter)[m_columns.notify_status_handle] = g_signal_connect( G_OBJECT(user), "notify::status", G_CALLBACK(on_notify_status_static), this); if(INF_TEXT_IS_USER(user)) { Glib::RefPtr color_pixbuf = generate_user_color_pixbuf( *this, inf_text_user_get_hue(INF_TEXT_USER(user))); (*iter)[m_columns.color] = color_pixbuf; (*iter)[m_columns.notify_hue_handle] = g_signal_connect( G_OBJECT(user), "notify::hue", G_CALLBACK(on_notify_hue_static), this); } else { // Should be 0 anyway, but let's be sure: (*iter)[m_columns.notify_hue_handle] = 0; } } void Gobby::UserList::on_notify_hue(InfTextUser* user) { Gtk::TreeIter iter = find_user_iter(INF_USER(user)); g_assert(iter != m_store->children().end()); (*iter)[m_columns.color] = generate_user_color_pixbuf( *this, inf_text_user_get_hue(user)); } void Gobby::UserList::on_notify_status(InfUser* user) { Gtk::TreeIter iter = find_user_iter(user); g_assert(iter != m_store->children().end()); // This does not cause a resort: //m_store->row_changed(m_store->get_path(iter), iter); // But this does: (*iter)[m_columns.user] = user; } void Gobby::UserList::on_row_activated(const Gtk::TreePath& path, Gtk::TreeViewColumn* column) { Gtk::TreePath parent_path; if(m_filter_model) parent_path = m_filter_model->convert_path_to_child_path(path); else parent_path = path; const Gtk::TreeIter& iter = m_store->get_iter(path); InfUser* user = (*iter)[m_columns.user]; if(inf_user_get_status(user) != INF_USER_UNAVAILABLE) m_signal_user_activated.emit(user); } Gtk::TreeIter Gobby::UserList::find_user_iter(InfUser* user) { const Gtk::TreeModel::Children& children = m_store->children(); for(Gtk::TreeIter iter = children.begin(); iter != children.end(); ++ iter) { if(user == (*iter)[m_columns.user]) return iter; } return children.end(); } gobby-0.5.0/code/core/nodewatch.hpp0000644000175000017500000000457612370427450014106 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_NODE_WATCH_HPP_ #define _GOBBY_NODE_WATCH_HPP_ #include #include #include namespace Gobby { class NodeWatch { public: typedef sigc::signal SignalNodeRemoved; NodeWatch(InfBrowser* browser, const InfBrowserIter* iter); ~NodeWatch(); InfBrowser* get_browser() const { return m_browser; } const InfBrowserIter* get_browser_iter() const { g_assert(m_browser); if(m_iter.node != NULL) return &m_iter; else return NULL; } SignalNodeRemoved signal_node_removed() const { return m_signal_node_removed; } protected: static void on_notify_status_static(GObject* object, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)-> on_notify_status(); } static void on_node_removed_static(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request, gpointer user_data) { static_cast(user_data)-> on_node_removed(browser, iter, request); } void on_notify_status(); void on_node_removed(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request); void reset(); InfBrowser* m_browser; InfXmlConnection* m_connection; InfBrowserIter m_iter; gulong m_notify_status_handler; gulong m_node_removed_handler; SignalNodeRemoved m_signal_node_removed; }; } #endif // _GOBBY_NODE_WATCH_HPP_ gobby-0.5.0/code/core/filechooser.cpp0000644000175000017500000000431312370427450014414 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/filechooser.hpp" #include #include #include Gobby::FileChooser::Dialog::Dialog(Gobby::FileChooser& chooser, Gtk::Window& parent, const Glib::ustring& title, Gtk::FileChooserAction action): Gtk::FileChooserDialog(parent, title, action), m_chooser(chooser) { // Set defaults depending on action switch(action) { case Gtk::FILE_CHOOSER_ACTION_SAVE: add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); add_button(Gtk::Stock::SAVE, Gtk::RESPONSE_ACCEPT); set_do_overwrite_confirmation(true); break; case Gtk::FILE_CHOOSER_ACTION_OPEN: add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT); break; default: g_assert_not_reached(); break; } set_local_only(false); set_current_folder_uri(m_chooser.get_current_folder_uri()); } Gobby::FileChooser::Dialog::~Dialog() { m_chooser.set_current_folder_uri(get_current_folder_uri()); } Gobby::FileChooser::FileChooser(): m_current_folder_uri(Glib::filename_to_uri(Glib::get_current_dir())) { } const std::string& Gobby::FileChooser::get_current_folder_uri() const { return m_current_folder_uri; } void Gobby::FileChooser::set_current_folder_uri(const std::string& uri) { m_current_folder_uri = uri; } gobby-0.5.0/code/core/preferences.hpp0000644000175000017500000001115212370427450014417 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_PREFERENCES_HPP_ #define _GOBBY_PREFERENCES_HPP_ #include "util/config.hpp" #include "features.hpp" #include #include #include #include namespace Gobby { class Preferences { public: template class Option { public: typedef sigc::signal signal_changed_type; Option(const Type& initial_value): m_value(initial_value) {} const Option& operator=(const Type& new_value) { m_value = new_value; notify(); return *this; } void set(const Type& new_value) { *this = new_value; } const Type& get() const { return m_value; } operator const Type&() const { return m_value; } /*operator Type&() { return m_value; }*/ signal_changed_type signal_changed() const { return m_signal_changed; } void notify() const { m_signal_changed.emit(); } protected: Type m_value; signal_changed_type m_signal_changed; }; /** Reads preferences values out of a config, using default values * for values that do not exist in the config. */ Preferences(Config& m_config); /** Serialises preferences back to config. */ void serialize(Config& config) const; class User { public: User(Config::ParentEntry& entry); void serialize(Config::ParentEntry& entry) const; Option name; Option hue; Option alpha; Option show_remote_cursors; Option show_remote_selections; Option show_remote_current_lines; Option show_remote_cursor_positions; Option allow_remote_access; Option require_password; Option password; Option port; Option keep_local_documents; Option host_directory; }; class Editor { public: Editor(Config::ParentEntry& entry); void serialize(Config::ParentEntry& entry) const; Option tab_width; Option tab_spaces; Option indentation_auto; Option homeend_smart; Option autosave_enabled; Option autosave_interval; }; class View { public: View(Config::ParentEntry& entry); void serialize(Config::ParentEntry& entry) const; Option wrap_mode; Option linenum_display; Option curline_highlight; Option margin_display; Option margin_pos; Option bracket_highlight; Option whitespace_display; }; class Appearance { public: Appearance(Config::ParentEntry& entry); void serialize(Config::ParentEntry& entry) const; // TODO: Option use_system_default_toolbar_style // (sets toolbar_style by gconf). At least WITH_GNOME. Option toolbar_style; Option font; Option scheme_id; Option document_userlist_width; Option chat_userlist_width; Option show_toolbar; Option show_statusbar; Option show_browser; Option show_chat; Option show_document_userlist; Option show_chat_userlist; }; class Security { public: Security(Config::ParentEntry& entry); void serialize(Config::ParentEntry& entry) const; Option trust_file; Option policy; Option authentication_enabled; Option key_file; Option certificate_file; }; User user; Editor editor; View view; Appearance appearance; Security security; }; template std::ostream& operator<<(std::ostream& stream, const Preferences::Option& option) { stream << static_cast(option); return stream; } } #endif // _GOBBY_PREFERENCES_HPP_ gobby-0.5.0/code/core/sessionview.hpp0000644000175000017500000000437712370427450014507 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_SESSIONVIEW_HPP_ #define _GOBBY_SESSIONVIEW_HPP_ #include "util/closebutton.hpp" #include #include #include #include namespace Gobby { class SessionView: public Gtk::VBox { public: typedef sigc::signal SignalActiveUserChanged; SessionView(InfSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname); virtual ~SessionView(); const InfSession* get_session() const { return m_session; } InfSession* get_session() { return m_session; } const Glib::ustring& get_title() const { return m_title; } const Glib::ustring& get_path() const { return m_path; } const Glib::ustring& get_hostname() const { return m_hostname; } void set_info(const Glib::ustring& info, bool closable); void unset_info(); virtual InfUser* get_active_user() const; SignalActiveUserChanged signal_active_user_changed() const { return m_signal_active_user_changed; } protected: void active_user_changed(InfUser* new_user); InfSession* m_session; const Glib::ustring m_title; const Glib::ustring m_path; const Glib::ustring m_hostname; Gtk::Frame m_info_frame; Gtk::VBox m_info_box; Gtk::HBox m_info_close_button_box; CloseButton m_info_close_button; Gtk::Label m_info_label; private: SignalActiveUserChanged m_signal_active_user_changed; }; } #endif // _GOBBY_SESSIONVIEW_HPP_ gobby-0.5.0/code/core/huebutton.cpp0000644000175000017500000000573312370427450014136 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/huebutton.hpp" #include "util/color.hpp" #include #include Gobby::HueButton::HueButton(const Glib::ustring& title, Gtk::Window& parent): m_title(title), m_parent(parent), m_saturation(1.0), m_value(1.0) { parent.signal_hide().connect( sigc::mem_fun(*this, &HueButton::on_parent_hide)); set_hue(1.0); } double Gobby::HueButton::get_hue() const { return hue_from_gdk_color(get_color()); } double Gobby::HueButton::get_saturation() const { return m_saturation; } double Gobby::HueButton::get_value() const { return m_value; } void Gobby::HueButton::set_hue(double hue) { Gdk::Color color; color.set_hsv(hue * 360.0, m_saturation, m_value); set_color(color); } void Gobby::HueButton::set_saturation(double saturation) { m_saturation = saturation; set_hue(get_hue()); // Update view } void Gobby::HueButton::set_value(double value) { m_value = value; set_hue(get_hue()); // Update view } void Gobby::HueButton::on_clicked() { if(!m_dialog.get()) { m_dialog.reset(new Gtk::Dialog(m_title, m_parent)); m_hue_chooser = inf_text_gtk_hue_chooser_new_with_hue(get_hue()); gtk_box_pack_start(GTK_BOX(m_dialog->get_vbox()->gobj()), m_hue_chooser, FALSE, FALSE, 0); gtk_widget_show(m_hue_chooser); m_dialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); m_dialog->add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK); m_dialog->set_default_response(Gtk::RESPONSE_OK); m_dialog->set_resizable(false); m_dialog->signal_response().connect( sigc::mem_fun(*this, &HueButton::on_dialog_response)); } else { inf_text_gtk_hue_chooser_set_hue( INF_TEXT_GTK_HUE_CHOOSER(m_hue_chooser), get_hue()); } m_dialog->present(); } void Gobby::HueButton::on_parent_hide() { // Hide child dialog when the window containing the color button // goes away m_dialog.reset(NULL); } void Gobby::HueButton::on_dialog_response(int response_id) { if(response_id == Gtk::RESPONSE_OK) { set_hue( inf_text_gtk_hue_chooser_get_hue( INF_TEXT_GTK_HUE_CHOOSER(m_hue_chooser))); } m_dialog->hide(); } gobby-0.5.0/code/core/chattablabel.cpp0000644000175000017500000000434512370427450014525 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/chattablabel.hpp" #include "core/iconmanager.hpp" #include Gobby::ChatTabLabel::ChatTabLabel(Folder& folder, ChatSessionView& view, bool always_show_close_button): TabLabel(folder, view, always_show_close_button ? Gobby::IconManager::STOCK_CHAT : Gtk::Stock::NETWORK), m_always_show_close_button(always_show_close_button) { if(!m_always_show_close_button) m_button.hide(); // Only show when disconnected InfChatBuffer* buffer = INF_CHAT_BUFFER( inf_session_get_buffer(INF_SESSION(view.get_session()))); m_add_message_handle = g_signal_connect_after( G_OBJECT(buffer), "add-message", G_CALLBACK(on_add_message_static), this); } Gobby::ChatTabLabel::~ChatTabLabel() { InfChatBuffer* buffer = INF_CHAT_BUFFER( inf_session_get_buffer(INF_SESSION(m_view.get_session()))); g_signal_handler_disconnect(buffer, m_add_message_handle); } void Gobby::ChatTabLabel::on_notify_subscription_group() { InfSession* session = INF_SESSION(m_view.get_session()); if(inf_session_get_subscription_group(session) != NULL && !m_always_show_close_button) { m_button.hide(); } else { m_button.show(); } } void Gobby::ChatTabLabel::on_changed(InfUser* author) { if(!m_changed) { InfSession* session = INF_SESSION(m_view.get_session()); if(inf_session_get_status(session) == INF_SESSION_RUNNING) set_changed(); } } gobby-0.5.0/code/core/browser.hpp0000644000175000017500000001050112375127733013604 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_BROWSER_HPP_ #define _GOBBY_BROWSER_HPP_ #include "core/connectionmanager.hpp" #include "core/statusbar.hpp" #include "util/historyentry.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace Gobby { class Browser: public Gtk::VBox { public: typedef sigc::signal SignalConnect; typedef sigc::signal SignalActivate; Browser(Gtk::Window& parent, StatusBar& status_bar, ConnectionManager& connection_manager); ~Browser(); ConnectionManager& get_connection_manager() { return m_connection_manager; } InfGtkBrowserModelSort* get_store() { return m_sort_model; } const InfGtkBrowserModelSort* get_store() const { return m_sort_model; } InfGtkBrowserView* get_view() { return m_browser_view; } bool get_selected_browser(InfBrowser** browser); bool get_selected_iter(InfBrowser* browser, InfBrowserIter* iter); void set_selected(InfBrowser* browser, const InfBrowserIter* iter); InfBrowser* connect_to_host(const std::string& hostname, const std::string& service, unsigned int device_index); InfBrowser* connect_to_host(const InfIpAddress* address, guint port, unsigned int device_index, const std::string& hostname); void add_browser(InfBrowser* browser, const char* name); void remove_browser(InfBrowser* browser); SignalActivate signal_activate() const { return m_signal_activate; } SignalConnect signal_connect() const { return m_signal_connect; } protected: void init_accessibility(); static void on_set_browser_static(InfGtkBrowserModel* model, GtkTreePath* path, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser, gpointer user_data) { static_cast(user_data)->on_set_browser( iter, old_browser, new_browser); } static void on_activate_static(InfGtkBrowserView* view, GtkTreeIter* iter, gpointer user_data) { static_cast(user_data)->on_activate(iter); } void on_connection_replaced(InfXmppConnection* connection, InfXmppConnection* by); void on_expanded_changed(); void on_set_browser(GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser); void on_activate(GtkTreeIter* iter); void on_hostname_activate(); Gtk::Window& m_parent; StatusBar& m_status_bar; ConnectionManager& m_connection_manager; InfGtkCertificateManager* m_cert_checker; InfGtkBrowserStore* m_browser_store; InfGtkBrowserView* m_browser_view; Gtk::ScrolledWindow m_scroll; Gtk::Expander m_expander; Gtk::HBox m_hbox; Gtk::Label m_label_hostname; HistoryComboBoxEntry m_entry_hostname; InfGtkBrowserModelSort* m_sort_model; SignalConnect m_signal_connect; SignalActivate m_signal_activate; }; } #endif // _GOBBY_BROWSER_HPP_ gobby-0.5.0/code/core/titlebar.hpp0000644000175000017500000000371512370427450013732 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_TITLEBAR_HPP_ #define _GOBBY_TITLEBAR_HPP_ #include "core/folder.hpp" #include "core/sessionview.hpp" #include #include namespace Gobby { class TitleBar: public sigc::trackable { public: TitleBar(Gtk::Window& window, const Folder& folder); ~TitleBar(); private: static void on_notify_status_static(GObject* object, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)->on_notify_status(); } static void on_notify_modified_static(InfBuffer* buffer, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)->on_notify_modified(); } void on_document_removed(SessionView& view); void on_document_changed(SessionView* view); void on_notify_status(); void on_notify_modified(); void update_title(); Gtk::Window& m_window; const Folder& m_folder; SessionView* m_current_view; gulong m_notify_status_handler; gulong m_modified_changed_handler; }; } #endif // _GOBBY_TITLEBAR_HPP_ gobby-0.5.0/code/core/noteplugin.cpp0000644000175000017500000001352312370747151014304 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/noteplugin.hpp" #include #include #include #include #include #include #include #include #include #include namespace { InfTextBuffer* make_buffer(InfUserTable* user_table) { GtkSourceBuffer* textbuffer = gtk_source_buffer_new(NULL); // We never end this non-undoable action since we have our // own (collaborative) Undo implementanion, and we don't want // GtkSourceView to get in our way: gtk_source_buffer_begin_not_undoable_action(textbuffer); InfTextGtkBuffer* buffer = inf_text_gtk_buffer_new(GTK_TEXT_BUFFER(textbuffer), user_table); g_object_unref(textbuffer); return INF_TEXT_BUFFER(buffer); } InfSession* text_session_new(InfIo* io, InfCommunicationManager* manager, InfSessionStatus status, InfCommunicationGroup* sync_group, InfXmlConnection* sync_connection, gpointer user_data) { InfUserTable* user_table = inf_user_table_new(); InfTextBuffer* buffer = make_buffer(user_table); InfTextSession* session = inf_text_session_new_with_user_table( manager, INF_TEXT_BUFFER(buffer), io, user_table, status, sync_group, sync_connection); g_object_unref(buffer); g_object_unref(user_table); return INF_SESSION(session); } InfSession* text_session_read(InfdStorage* storage, InfIo* io, InfCommunicationManager* manager, const gchar* path, gpointer user_data, GError** error) { InfUserTable* user_table = inf_user_table_new(); InfTextBuffer* buffer = make_buffer(user_table); const gboolean result = inf_text_filesystem_format_read( INFD_FILESYSTEM_STORAGE(storage), path, user_table, buffer, error); InfTextSession* session = NULL; if(result) { session = inf_text_session_new_with_user_table( manager, buffer, io, user_table, INF_SESSION_RUNNING, NULL, NULL); } g_object_unref(buffer); g_object_unref(user_table); return INF_SESSION(session); } gboolean text_session_write(InfdStorage* storage, InfSession* session, const gchar* path, gpointer user_data, GError** error) { return inf_text_filesystem_format_write( INFD_FILESYSTEM_STORAGE(storage), path, inf_session_get_user_table(session), INF_TEXT_BUFFER(inf_session_get_buffer(session)), error ); } InfSession* chat_session_new(InfIo* io, InfCommunicationManager* manager, InfSessionStatus status, InfCommunicationGroup* sync_group, InfXmlConnection* sync_connection, gpointer user_data) { InfChatBuffer* buffer = inf_chat_buffer_new(256); InfChatSession* session = inf_chat_session_new( manager, buffer, status, sync_group, sync_connection); g_object_unref(buffer); return INF_SESSION(session); } InfSession* chat_session_read(InfdStorage* storage, InfIo* io, InfCommunicationManager* manager, const gchar* path, gpointer user_data, GError** error) { InfChatBuffer* buffer = inf_chat_buffer_new(256); const gboolean result = infd_chat_filesystem_format_read( INFD_FILESYSTEM_STORAGE(storage), path, buffer, error); InfChatSession* session = NULL; if(result) { session = inf_chat_session_new( manager, buffer, INF_SESSION_RUNNING, NULL, NULL); } g_object_unref(buffer); return INF_SESSION(session); } gboolean chat_session_write(InfdStorage* storage, InfSession* session, const gchar* path, gpointer user_data, GError** error) { return infd_chat_filesystem_format_write( INFD_FILESYSTEM_STORAGE(storage), path, INF_CHAT_BUFFER(inf_session_get_buffer(session)), error ); } const InfcNotePlugin C_TEXT_PLUGIN = { NULL, "InfText", text_session_new }; const InfcNotePlugin C_CHAT_PLUGIN = { NULL, "InfChat", chat_session_new }; const InfdNotePlugin D_TEXT_PLUGIN = { NULL, "InfdFilesystemStorage", "InfText", text_session_new, text_session_read, text_session_write }; const InfdNotePlugin D_CHAT_PLUGIN = { NULL, "InfdFilesystemStorage", "InfChat", chat_session_new, chat_session_read, chat_session_write }; } const InfcNotePlugin* Gobby::Plugins::C_TEXT = &C_TEXT_PLUGIN; const InfcNotePlugin* Gobby::Plugins::C_CHAT = &C_CHAT_PLUGIN; const InfdNotePlugin* Gobby::Plugins::D_TEXT = &D_TEXT_PLUGIN; const InfdNotePlugin* Gobby::Plugins::D_CHAT = &D_CHAT_PLUGIN; gobby-0.5.0/code/core/server.cpp0000644000175000017500000001415012370427450013420 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/selfhoster.hpp" #include "util/file.hpp" #include "util/i18n.hpp" #include #include #include #include Gobby::Server::Server(InfIo* io, InfLocalPublisher* publisher): m_io(io), m_publisher(publisher), m_xmpp4(NULL), m_xmpp6(NULL), m_pool(NULL) { g_object_ref(m_io); } Gobby::Server::~Server() { if(is_open()) close(); set_pool(NULL); g_object_unref(m_io); } void Gobby::Server::open(unsigned int port, InfXmppConnectionSecurityPolicy security_policy, InfCertificateCredentials* creds, InfSaslContext* context, const char* sasl_mechanisms) { // If we can open one of tcp4 or tcp6 that's a success. InfdTcpServer* tcp4; InfdTcpServer* tcp6; // If the server is already open and we do not need to change the // port, then just change the credentials and SASL context without // doing anything else. if(is_open() && get_port() == port) { set_credentials(security_policy, creds); set_sasl_context(context, sasl_mechanisms); return; } static const guint8 ANY6_ADDR[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; InfIpAddress* any6 = inf_ip_address_new_raw6(ANY6_ADDR); tcp4 = INFD_TCP_SERVER(g_object_new( INFD_TYPE_TCP_SERVER, "io", m_io, "local-address", NULL, "local-port", port, NULL)); tcp6 = INFD_TCP_SERVER(g_object_new( INFD_TYPE_TCP_SERVER, "io", m_io, "local-address", any6, "local-port", port, NULL)); inf_ip_address_free(any6); if(!infd_tcp_server_open(tcp6, NULL)) { g_object_unref(tcp6); tcp6 = NULL; GError* error = NULL; if(!infd_tcp_server_open(tcp4, &error)) { g_object_unref(tcp4); const std::string message = error->message; g_error_free(error); throw std::runtime_error(message); } } else { if(!infd_tcp_server_open(tcp4, NULL)) { g_object_unref(tcp4); tcp4 = NULL; } } // We have the new server open, from this point on there is nothing // that can go wrong anymore. Therefore, close the old server and // take over the new one. if(is_open()) close(); InfXmppConnectionSecurityPolicy policy = INF_XMPP_CONNECTION_SECURITY_ONLY_UNSECURED; if(creds != NULL) policy = security_policy; if(tcp4) { m_xmpp4 = infd_xmpp_server_new( tcp4, policy, creds, context, sasl_mechanisms); g_object_unref(tcp4); } if(tcp6) { m_xmpp6 = infd_xmpp_server_new( tcp6, policy, creds, context, sasl_mechanisms); g_object_unref(tcp6); } if(m_pool) { if(m_xmpp4 != NULL) { infd_server_pool_add_server( m_pool, INFD_XML_SERVER(m_xmpp4)); infd_server_pool_add_local_publisher( m_pool, m_xmpp4, m_publisher); } if(m_xmpp6 != NULL) { infd_server_pool_add_server( m_pool, INFD_XML_SERVER(m_xmpp6)); infd_server_pool_add_local_publisher( m_pool, m_xmpp6, m_publisher); } } } void Gobby::Server::close() { g_assert(is_open()); if(m_xmpp6 != NULL) { // Will be removed from server pool automatically infd_xml_server_close(INFD_XML_SERVER(m_xmpp6)); g_object_unref(m_xmpp6); m_xmpp6 = NULL; } if(m_xmpp4 != NULL) { // Will be removed from server pool automatically infd_xml_server_close(INFD_XML_SERVER(m_xmpp4)); g_object_unref(m_xmpp4); m_xmpp4 = NULL; } } bool Gobby::Server::is_open() const { return m_xmpp4 != NULL || m_xmpp6 != NULL; } unsigned int Gobby::Server::get_port() const { g_assert(is_open()); InfdXmppServer* xmpp = m_xmpp6; if(xmpp == NULL) xmpp = m_xmpp4; g_assert(xmpp != NULL); InfdTcpServer* tcp; g_object_get(G_OBJECT(xmpp), "tcp-server", &tcp, NULL); guint port; g_object_get(G_OBJECT(tcp), "local-port", &port, NULL); g_object_unref(tcp); return port; } void Gobby::Server::set_sasl_context(InfSaslContext* context, const char* sasl_mechanisms) { if(m_xmpp6 != NULL) { g_object_set( G_OBJECT(m_xmpp6), "sasl-context", context, "sasl-mechanisms", sasl_mechanisms, NULL); } if(m_xmpp4 != NULL) { g_object_set( G_OBJECT(m_xmpp4), "sasl-context", context, "sasl-mechanisms", sasl_mechanisms, NULL); } } void Gobby::Server::set_credentials(InfXmppConnectionSecurityPolicy policy, InfCertificateCredentials* credentials) { if(m_xmpp6 != NULL) { g_object_set( G_OBJECT(m_xmpp6), "security-policy", policy, "credentials", credentials, NULL); } if(m_xmpp4 != NULL) { g_object_set( G_OBJECT(m_xmpp4), "security-policy", policy, "credentials", credentials, NULL); } } void Gobby::Server::set_pool(InfdServerPool* pool) { if(m_pool != NULL) { if(m_xmpp4 != NULL) infd_server_pool_remove_server( m_pool, INFD_XML_SERVER(m_xmpp4)); if(m_xmpp6 != NULL) infd_server_pool_remove_server( m_pool, INFD_XML_SERVER(m_xmpp6)); g_object_unref(m_pool); } m_pool = pool; if(m_pool != NULL) { g_object_ref(m_pool); if(m_xmpp4 != NULL) { infd_server_pool_add_server( m_pool, INFD_XML_SERVER(m_xmpp4)); infd_server_pool_add_local_publisher( m_pool, m_xmpp4, m_publisher); } if(m_xmpp6 != NULL) { infd_server_pool_add_server( m_pool, INFD_XML_SERVER(m_xmpp6)); infd_server_pool_add_local_publisher( m_pool, m_xmpp6, m_publisher); } } } gobby-0.5.0/code/core/iconmanager.cpp0000644000175000017500000000613412370427450014400 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/iconmanager.hpp" #include "util/i18n.hpp" #include #include Gtk::StockID Gobby::IconManager::STOCK_SAVE_ALL("gobby-save-all"); Gtk::StockID Gobby::IconManager::STOCK_USERLIST("gobby-user-list"); Gtk::StockID Gobby::IconManager::STOCK_DOCLIST("gobby-document-list"); Gtk::StockID Gobby::IconManager::STOCK_CHAT("gobby-chat"); Gtk::StockID Gobby::IconManager::STOCK_USER_COLOR_INDICATOR( "gobby-user-color-indicator"); // TODO: The save-all icon does not match the save icon for toolbar // or menu sized items. It is not yet enabled therefore. Gobby::IconManager::IconManager(): m_is_save_all(GtkCompat::create_icon_set()), m_is_userlist(GtkCompat::create_icon_set()), m_is_doclist(GtkCompat::create_icon_set()), m_is_chat(GtkCompat::create_icon_set()), m_is_user_color_indicator(GtkCompat::create_icon_set()), m_icon_factory(Gtk::IconFactory::create()) { Gtk::IconTheme::get_default()->append_search_path(PUBLIC_ICONS_DIR); Gtk::IconTheme::get_default()->append_search_path(PRIVATE_ICONS_DIR); Gtk::StockItem save_all_item(STOCK_SAVE_ALL, _("Save All")); //m_icon_factory->add(STOCK_SAVE_ALL, m_is_save_all); Gtk::IconSource userlist_source; userlist_source.set_icon_name("user-list"); m_is_userlist->add_source(userlist_source); Gtk::StockItem userlist_item(STOCK_USERLIST, _("User list") ); m_icon_factory->add(STOCK_USERLIST, m_is_userlist); Gtk::IconSource doclist_source; doclist_source.set_icon_name("document-list"); m_is_doclist->add_source(doclist_source); Gtk::StockItem doclist_item(STOCK_DOCLIST, _("Document list") ); m_icon_factory->add(STOCK_DOCLIST, m_is_doclist); Gtk::IconSource chat_source; chat_source.set_icon_name("chat"); m_is_chat->add_source(chat_source); Gtk::StockItem chat_item(STOCK_CHAT, _("Chat") ); m_icon_factory->add(STOCK_CHAT, m_is_chat); Gtk::IconSource user_color_indicator_source; user_color_indicator_source.set_icon_name("user-color-indicator"); m_is_user_color_indicator->add_source(user_color_indicator_source); Gtk::StockItem user_color_indicator_item(STOCK_USER_COLOR_INDICATOR, _("User Color Indicator")); m_icon_factory->add(STOCK_USER_COLOR_INDICATOR, m_is_user_color_indicator); m_icon_factory->add_default(); } gobby-0.5.0/code/core/foldermanager.cpp0000644000175000017500000002610412375141554014725 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/foldermanager.hpp" #include "util/i18n.hpp" #include #include class Gobby::FolderManager::BrowserInfo { public: BrowserInfo(FolderManager& manager, InfBrowser* browser): m_browser(browser) { g_object_ref(m_browser); m_unsubscribe_session_handler = g_signal_connect( G_OBJECT(browser), "unsubscribe-session", G_CALLBACK(&on_unsubscribe_session_static), &manager); } ~BrowserInfo() { g_signal_handler_disconnect(G_OBJECT(m_browser), m_unsubscribe_session_handler); g_object_unref(m_browser); } private: InfBrowser* m_browser; gulong m_unsubscribe_session_handler; }; class Gobby::FolderManager::SessionInfo { public: SessionInfo(Folder& folder, InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy): m_folder(folder), m_browser(browser), m_proxy(proxy) { if(browser != NULL && iter != NULL) m_browser_iter = *iter; else m_browser = NULL; if(proxy != NULL) g_object_ref(proxy); } ~SessionInfo() { if(m_proxy != NULL) g_object_unref(m_proxy); } void reset_browser() { m_browser = NULL; } InfBrowser* get_browser() { return m_browser; } const InfBrowserIter* get_browser_iter() { return m_browser == NULL ? NULL : &m_browser_iter; } Folder& get_folder() { return m_folder; } InfSessionProxy* get_proxy() { return m_proxy; } private: Folder& m_folder; InfBrowser* m_browser; InfBrowserIter m_browser_iter; InfSessionProxy* m_proxy; }; Gobby::FolderManager::FolderManager(Browser& browser, DocumentInfoStorage& info_storage, Folder& text_folder, Folder& chat_folder): m_browser(browser), m_info_storage(info_storage), m_text_folder(text_folder), //false, preferences, m_lang_manager), m_chat_folder(chat_folder) //true, preferences, m_lang_manager) { InfGtkBrowserModel* model = INF_GTK_BROWSER_MODEL(browser.get_store()); m_set_browser_handler = g_signal_connect( G_OBJECT(model), "set-browser", G_CALLBACK(&on_set_browser_static), this); m_text_document_added_connection = m_text_folder.signal_document_added().connect( sigc::mem_fun( *this, &FolderManager::on_text_document_added)); m_chat_document_added_connection = m_chat_folder.signal_document_added().connect( sigc::mem_fun( *this, &FolderManager::on_chat_document_added)); m_text_folder.signal_document_removed().connect( sigc::mem_fun( *this, &FolderManager::on_document_removed)); m_chat_folder.signal_document_removed().connect( sigc::mem_fun( *this, &FolderManager::on_document_removed)); } Gobby::FolderManager::~FolderManager() { for(BrowserMap::iterator iter = m_browser_map.begin(); iter != m_browser_map.end(); ++ iter) { delete iter->second; } for(SessionMap::iterator iter = m_session_map.begin(); iter != m_session_map.end(); ++iter) { delete iter->second; } g_signal_handler_disconnect( INF_GTK_BROWSER_MODEL(m_browser.get_store()), m_set_browser_handler); } void Gobby::FolderManager::add_document(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, UserJoinRef userjoin) { gchar* hostname; if(INFC_IS_BROWSER(browser)) { InfXmlConnection* connection = infc_browser_get_connection(INFC_BROWSER(browser)); g_object_get( G_OBJECT(connection), "remote-hostname", &hostname, NULL); } else if(INFD_IS_DIRECTORY(browser)) { hostname = g_strdup(g_get_host_name()); } else { g_assert_not_reached(); hostname = NULL; } InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); TextSessionView* text_view = NULL; Folder* folder; SessionView* view; if(INF_TEXT_IS_SESSION(session)) { gchar* path = inf_browser_get_path(browser, iter); m_text_document_added_connection.block(); text_view = &m_text_folder.add_text_session( INF_TEXT_SESSION(session), inf_browser_get_node_name(browser, iter), path, hostname, m_info_storage.get_key(browser, iter)); m_text_document_added_connection.unblock(); folder = &m_text_folder; view = text_view; g_free(path); } else if(INF_IS_CHAT_SESSION(session)) { if(iter == NULL) { m_chat_document_added_connection.block(); view = &m_chat_folder.add_chat_session( INF_CHAT_SESSION(session), hostname, "", hostname); m_chat_document_added_connection.unblock(); } else { gchar* path = inf_browser_get_path(browser, iter); m_chat_document_added_connection.block(); view = &m_chat_folder.add_chat_session( INF_CHAT_SESSION(session), inf_browser_get_node_name(browser, iter), path, hostname); m_chat_document_added_connection.unblock(); g_free(path); } folder = &m_chat_folder; } else { // Cannot happen, because we don't have any other note plugins // installed in the browser. g_assert_not_reached(); } g_free(hostname); // Highlight the newly created session folder->switch_to_document(*view); if(text_view) gtk_widget_grab_focus(GTK_WIDGET(text_view->get_text_view())); if(iter) m_browser.set_selected(browser, iter); g_assert(m_session_map.find(session) == m_session_map.end()); m_session_map[session] = new SessionInfo(*folder, browser, iter, proxy); g_object_unref(session); m_signal_document_added.emit( browser, iter, proxy, *folder, *view, userjoin); } void Gobby::FolderManager::remove_document(SessionView& view) { SessionMap::const_iterator iter = m_session_map.find(view.get_session()); g_assert(iter != m_session_map.end()); iter->second->get_folder().remove_document(view); } Gobby::SessionView* Gobby::FolderManager::lookup_document(InfSession* session) const { SessionMap::const_iterator iter = m_session_map.find(session); if(iter == m_session_map.end()) return NULL; return iter->second->get_folder().lookup_document(session); } void Gobby::FolderManager::switch_to_document(SessionView& view) { SessionMap::iterator iter = m_session_map.find(view.get_session()); g_assert(iter != m_session_map.end()); iter->second->get_folder().switch_to_document(view); } void Gobby::FolderManager::on_set_browser(InfGtkBrowserModel* model, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser) { if(old_browser != NULL) { BrowserMap::iterator iter = m_browser_map.find(old_browser); g_assert(iter != m_browser_map.end()); delete iter->second; m_browser_map.erase(iter); } if(new_browser != NULL) { g_assert(m_browser_map.find(new_browser) == m_browser_map.end()); m_browser_map[new_browser] = new BrowserInfo(*this, new_browser); } } void Gobby::FolderManager::on_unsubscribe_session(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, InfRequest* request) { InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); SessionMap::iterator session_iter = m_session_map.find(session); // Note that the session might not be in the session map, for example // if we are subscribed but do not show a document for the session. if(session_iter != m_session_map.end()) { // Browser entry disappeared for the session, so invalidate // our iterator. The session is now "floating", without any // browser entry. session_iter->second->reset_browser(); // When the subscription group of the session is still // available, then close the session. This can essentially // only happen on the server side, and it closes the session // when it is removed from the document tree. In principle // the session could go on until the document is closed by // the server, but this probably causes more confusion than // anything else. So we close it. // TODO: It would be nice to keep the session itself alive, // and to only unsubscribe all clients and set the local users // to unavailable. if(inf_session_get_subscription_group(session) != NULL) { lookup_document(session)->set_info( _("The document has been removed from the server."), true); inf_session_close(session); } } g_object_unref(session); } void Gobby::FolderManager::on_text_document_added(SessionView& view) { // This should not happen, because we only hand out const folders. g_assert_not_reached(); InfSession* session = view.get_session(); // Do as if the document was added "normally", but we cannot associate // either a browser entry or a session proxy. g_assert(m_session_map.find(session) == m_session_map.end()); m_session_map[session] = new SessionInfo(m_text_folder, NULL, NULL, NULL); m_signal_document_added.emit(NULL, NULL, NULL, m_text_folder, view, NULL); } void Gobby::FolderManager::on_chat_document_added(SessionView& view) { // This should not happen, because we only hand out const folders. g_assert_not_reached(); InfSession* session = view.get_session(); // Do as if the document was added "normally", but we cannot associate // either a browser entry or a session proxy. g_assert(m_session_map.find(session) == m_session_map.end()); m_session_map[session] = new SessionInfo(m_chat_folder, NULL, NULL, NULL); m_signal_document_added.emit(NULL, NULL, NULL, m_chat_folder, view, NULL); } void Gobby::FolderManager::on_document_removed(SessionView& view) { InfSession* session = view.get_session(); SessionMap::iterator session_iter = m_session_map.find(session); g_assert(session_iter != m_session_map.end()); Folder& folder = session_iter->second->get_folder(); InfBrowser* browser = session_iter->second->get_browser(); InfSessionProxy* proxy = session_iter->second->get_proxy(); const InfBrowserIter* iter = session_iter->second->get_browser_iter(); InfBrowserIter local_iter; if(iter != NULL) local_iter = *iter; g_object_ref(proxy); delete session_iter->second; m_session_map.erase(session_iter); m_signal_document_removed.emit( browser, browser != NULL ? &local_iter : NULL, proxy, folder, view); g_object_unref(proxy); } gobby-0.5.0/code/core/titlebar.cpp0000644000175000017500000000607612370427450013730 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/titlebar.hpp" Gobby::TitleBar::TitleBar(Gtk::Window& window, const Folder& folder): m_window(window), m_folder(folder), m_current_view(NULL) { folder.signal_document_removed().connect( sigc::mem_fun(*this, &TitleBar::on_document_removed)); folder.signal_document_changed().connect( sigc::mem_fun(*this, &TitleBar::on_document_changed)); on_document_changed(folder.get_current_document()); } Gobby::TitleBar::~TitleBar() { on_document_changed(NULL); } void Gobby::TitleBar::on_document_removed(SessionView& view) { // TODO: Isn't this called by Folder already? if(m_current_view == &view) on_document_changed(NULL); } void Gobby::TitleBar::on_document_changed(SessionView* view) { if(m_current_view != NULL) { InfSession* session = m_current_view->get_session(); InfBuffer* buffer = inf_session_get_buffer(session); g_signal_handler_disconnect(G_OBJECT(session), m_notify_status_handler); g_signal_handler_disconnect(G_OBJECT(buffer), m_modified_changed_handler); } m_current_view = view; if(view != NULL) { InfSession* session = view->get_session(); InfBuffer* buffer = inf_session_get_buffer(session); m_notify_status_handler = g_signal_connect( G_OBJECT(session), "notify::status", G_CALLBACK(on_notify_status_static), this); m_modified_changed_handler = g_signal_connect( G_OBJECT(buffer), "notify::modified", G_CALLBACK(on_notify_modified_static), this); } update_title(); } void Gobby::TitleBar::on_notify_status() { update_title(); } void Gobby::TitleBar::on_notify_modified() { update_title(); } void Gobby::TitleBar::update_title() { // TODO: Show path, as gedit does. This requires change notification // for document info storage. if(m_current_view != NULL) { InfSession* session = m_current_view->get_session(); InfBuffer* buffer = inf_session_get_buffer(session); InfSessionStatus status = inf_session_get_status(session); if(status == INF_SESSION_SYNCHRONIZING || !inf_buffer_get_modified(buffer)) { m_window.set_title( m_current_view->get_title() + " - Gobby"); } else { m_window.set_title( "*" + m_current_view->get_title() + " - Gobby"); } } else { m_window.set_title("Gobby"); } } gobby-0.5.0/code/core/certificatemanager.hpp0000644000175000017500000000661212370427450015740 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CERTIFICATEMANAGER_HPP_ #define _GOBBY_CERTIFICATEMANAGER_HPP_ #include "core/preferences.hpp" namespace Gobby { class CertificateManager { public: CertificateManager(Preferences& preferences); ~CertificateManager(); gnutls_dh_params_t get_dh_params() const { return m_dh_params; } gnutls_x509_privkey_t get_private_key() const { return m_key; } InfCertificateChain* get_certificates() const { return m_certificates; } void set_dh_params(gnutls_dh_params_t dh_params); void set_private_key(gnutls_x509_privkey_t key, const GError* error); void set_private_key(gnutls_x509_privkey_t key, const char* filename, const GError* error); void set_certificates(gnutls_x509_crt_t* certs, guint n_certs, const GError* error); void set_certificates(gnutls_x509_crt_t* certs, guint n_certs, const char* filename, const GError* error); unsigned int get_n_trusted_cas() const { return m_trust.size(); } const gnutls_x509_crt_t* get_trusted_cas() const { return m_trust.empty() ? NULL : &m_trust[0]; } InfCertificateCredentials* get_credentials() const { return m_credentials; } // If an error occurs with the loading, the error can be // queried here. const GError* get_key_error() const { return m_key_error; } const GError* get_certificate_error() const { return m_certificate_error; } const GError* get_trust_error() const { return m_trust_error; } typedef sigc::signal signal_credentials_changed_type; signal_credentials_changed_type signal_credentials_changed() const { return m_signal_credentials_changed; } protected: Preferences& m_preferences; sigc::connection m_conn_key_file; sigc::connection m_conn_certificate_file; gnutls_dh_params_t m_dh_params; gnutls_x509_privkey_t m_key; InfCertificateChain* m_certificates; std::vector m_trust; InfCertificateCredentials* m_credentials; GError* m_key_error; GError* m_certificate_error; GError* m_trust_error; signal_credentials_changed_type m_signal_credentials_changed; private: void load_dh_params(); void load_key(); void load_certificate(); void load_trust(); void check_certificate_signature(); void make_credentials(); void on_key_file_changed(); void on_certificate_file_changed(); void on_trust_file_changed(); void on_authentication_enabled_changed(); }; } #endif // _GOBBY_CERTIFICATEMANAGER_HPP_ gobby-0.5.0/code/core/textundogrouping.cpp0000644000175000017500000000472512370427450015546 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/textundogrouping.hpp" Gobby::TextUndoGrouping::TextUndoGrouping(InfAdoptedAlgorithm* algorithm, InfTextUser* user, GtkTextBuffer* buffer): m_buffer(buffer), m_grouping(inf_text_undo_grouping_new()) { g_object_ref(m_buffer); inf_adopted_undo_grouping_set_algorithm( INF_ADOPTED_UNDO_GROUPING(m_grouping), algorithm, INF_ADOPTED_USER(user)); m_begin_user_action_handle = g_signal_connect( G_OBJECT(m_buffer), "begin-user-action", G_CALLBACK(on_begin_user_action_static), this); m_end_user_action_handle = g_signal_connect( G_OBJECT(m_buffer), "end-user-action", G_CALLBACK(on_end_user_action_static), this); } Gobby::TextUndoGrouping::~TextUndoGrouping() { g_signal_handler_disconnect(m_buffer, m_begin_user_action_handle); g_signal_handler_disconnect(m_buffer, m_end_user_action_handle); g_object_unref(m_grouping); g_object_unref(m_buffer); } guint Gobby::TextUndoGrouping::get_undo_size() const { return inf_adopted_undo_grouping_get_undo_size( INF_ADOPTED_UNDO_GROUPING(m_grouping)); } guint Gobby::TextUndoGrouping::get_redo_size() const { return inf_adopted_undo_grouping_get_redo_size( INF_ADOPTED_UNDO_GROUPING(m_grouping)); } void Gobby::TextUndoGrouping::on_begin_user_action() { // TODO: For paste actions we should not allow merging inf_adopted_undo_grouping_start_group( INF_ADOPTED_UNDO_GROUPING(m_grouping), TRUE); } void Gobby::TextUndoGrouping::on_end_user_action() { // TODO: For paste actions we should not allow merging inf_adopted_undo_grouping_end_group( INF_ADOPTED_UNDO_GROUPING(m_grouping), TRUE); } gobby-0.5.0/code/core/documentinfostorage.hpp0000644000175000017500000000722012370427450016176 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_OPERATIONS_DOCUMENTINFO_STORAGE_HPP_ #define _GOBBY_OPERATIONS_DOCUMENTINFO_STORAGE_HPP_ #include #include #include #include #include namespace Gobby { class DocumentInfoStorage: public sigc::trackable { public: enum EolStyle { EOL_CRLF, EOL_LF, EOL_CR }; struct Info { Glib::ustring uri; EolStyle eol_style; std::string encoding; }; DocumentInfoStorage(InfGtkBrowserModel* model); ~DocumentInfoStorage(); std::string get_key(InfBrowser* browser, const InfBrowserIter* iter) const; const Info* get_info(InfBrowser* browser, const InfBrowserIter* iter) const; const Info* get_info(const std::string& key) const; void set_info(InfBrowser* browser, const InfBrowserIter* iter, const Info& info); void set_info(const std::string& key, const Info& info); protected: static void on_set_browser_static(InfGtkBrowserModel* model, GtkTreePath* path, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser, gpointer user_data) { static_cast(user_data)-> on_set_browser(iter, old_browser, new_browser); } static void on_begin_request_explore_node_static(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request, gpointer user_data) { static_cast(user_data)-> on_begin_request_explore_node(browser, iter, request); } static void on_node_removed_static(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request, gpointer user_data) { static_cast(user_data)-> on_node_removed(browser, iter, request); } void on_set_browser(GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser); void on_begin_request_explore_node(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request); void on_node_removed(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request); typedef std::map InfoMap; InfoMap m_infos; class BrowserConn; typedef std::map BrowserMap; BrowserMap m_browsers; gulong m_set_browser_handler; InfGtkBrowserModel* m_model; private: void init(xmlpp::Element* node); }; } #endif // _GOBBY_OPERATIONS_DOCUMENTINFO_STORAGE_HPP_ gobby-0.5.0/code/core/textsessionview.hpp0000644000175000017500000001142412370427450015403 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_TEXTSESSIONVIEW_HPP_ #define _GOBBY_TEXTSESSIONVIEW_HPP_ #include "core/sessionview.hpp" #include "core/textundogrouping.hpp" #include "core/preferences.hpp" #include "util/gtk-compat.hpp" #include #include #include #include #include #include #include #include namespace Gobby { class TextSessionView: public SessionView { public: typedef sigc::signal SignalLanguageChanged; TextSessionView(InfTextSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname, const std::string& info_storage_key, Preferences& preferences, GtkSourceLanguageManager* manager); ~TextSessionView(); InfTextSession* get_session() { return INF_TEXT_SESSION(m_session); } const std::string& get_info_storage_key() const { return m_info_storage_key; } void get_cursor_position(unsigned int& row, unsigned int& col) const; void set_selection(const GtkTextIter* begin, const GtkTextIter* end); Glib::ustring get_selected_text() const; void scroll_to_cursor_position(double within_margin); GtkSourceLanguage* get_language() const; void set_language(GtkSourceLanguage* language); // cannot overwrite with covariant return type InfTextUser because // C++ does not know GObject inheritance: virtual InfUser* get_active_user() const; void set_active_user(InfTextUser* user); // requires active user to be set: TextUndoGrouping& get_undo_grouping() { return *m_undo_grouping; } GtkSourceView* get_text_view() { return m_view; } GtkSourceBuffer* get_text_buffer() { return m_buffer; } SignalLanguageChanged signal_language_changed() const { return m_signal_language_changed; } protected: void on_user_color_changed(); void on_alpha_changed(); void on_show_remote_cursors_changed(); void on_show_remote_selections_changed(); void on_show_remote_current_lines_changed(); void on_show_remote_cursor_positions_changed(); void on_tab_width_changed(); void on_tab_spaces_changed(); void on_auto_indent_changed(); void on_homeend_smart_changed(); void on_wrap_mode_changed(); void on_linenum_display_changed(); void on_curline_highlight_changed(); void on_margin_display_changed(); void on_margin_pos_changed(); void on_bracket_highlight_changed(); void on_whitespace_display_changed(); void on_font_changed(); void on_scheme_changed(); void on_style_set(); bool on_query_tooltip(int x, int y, bool keyboard_mode, const Glib::RefPtr& tooltip); static gboolean on_query_tooltip_static(GtkWidget* widget, int x, int y, gboolean keyboard_mode, GtkTooltip* tooltip, gpointer user_data) { return static_cast(user_data)-> on_query_tooltip(x, y, keyboard_mode, Glib::wrap(tooltip, true)); } #ifdef USE_GTKMM3 static void on_style_updated_static(GtkWidget* view, gpointer user_data) { static_cast(user_data)->on_style_set(); } #else static void on_style_set_static(GtkWidget* view, GtkStyle* previous_style, gpointer user_data) { static_cast(user_data)->on_style_set(); } #endif std::string m_info_storage_key; Preferences& m_preferences; GtkSourceView* m_view; GtkSourceBuffer* m_buffer; std::auto_ptr m_undo_grouping; InfTextGtkView* m_infview; InfTextGtkViewport* m_infviewport; SignalLanguageChanged m_signal_language_changed; }; } #endif // _GOBBY_TEXTSESSIONVIEW_HPP_ gobby-0.5.0/code/core/textsessionuserview.hpp0000644000175000017500000000342012370427450016277 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_TEXTSESSIONUSERVIEW_HPP_ #define _GOBBY_TEXTSESSIENUSERVIEW_HPP_ #include "core/sessionuserview.hpp" #include "core/textsessionview.hpp" #include "core/preferences.hpp" #include "core/userlist.hpp" // Allows a user in the user list to be double-clicked at, scrolling // the text view to that user's cursor. namespace Gobby { class TextSessionUserView: public SessionUserView { public: TextSessionUserView(TextSessionView& view, bool show_disconnected, Preferences::Option& userlist_view, Preferences::Option& w); TextSessionView& get_session_view() { return static_cast( SessionUserView::get_session_view()); } const TextSessionView& get_session_view() const { return static_cast( SessionUserView::get_session_view()); } protected: void on_user_activated(InfUser* user); }; } #endif // _GOBBY_TEXTSESSIONUSERVIEW_HPP_ gobby-0.5.0/code/core/userjoin.cpp0000644000175000017500000001571612372536400013757 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/userjoin.hpp" #include #include #include namespace { void retr_local_user_func(InfUser* user, gpointer user_data) { (*static_cast(user_data)) = user; } std::vector::iterator find_name_param( std::vector& params) { for(std::vector::iterator iter = params.begin(); iter != params.end(); ++iter) { if(std::strcmp(iter->name, "name") == 0) return iter; } g_assert_not_reached(); return params.end(); } } Gobby::UserJoin::UserJoin(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, std::auto_ptr param_provider): m_node(browser, iter), m_proxy(proxy), m_param_provider(param_provider), m_synchronization_complete_handler(0), m_request(NULL), m_retry_index(1), m_user(NULL), m_error(NULL) { g_object_ref(m_proxy); InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); if(inf_session_get_status(session) == INF_SESSION_SYNCHRONIZING) { // If not yet synchronized, wait for synchronization until // attempting userjoin m_synchronization_complete_handler = g_signal_connect_after( G_OBJECT(session), "synchronization-complete", G_CALLBACK(on_synchronization_complete_static), this); } else { // Delay this call to make sure we don't emit the // finished signal right inside the constructor. // TODO: This might not be a problem, since the caller // can just check for completion with the get_user() // and get_error() methods. Glib::signal_idle().connect( sigc::bind_return(sigc::mem_fun( *this, &UserJoin::attempt_user_join), false)); } g_object_unref(session); } Gobby::UserJoin::~UserJoin() { if(m_synchronization_complete_handler) { InfSession* session; g_object_get(G_OBJECT(m_proxy), "session", &session, NULL); g_signal_handler_disconnect( session, m_synchronization_complete_handler); g_object_unref(session); } if(m_request) { g_signal_handlers_disconnect_by_func( G_OBJECT(m_request), (gpointer)G_CALLBACK(on_user_join_finished_static), this); g_object_unref(m_request); // TODO: Keep watching the request, and when it finishes, make // the user unavailable. This should typically not be // necessary, because on the server side user join requests // finish immediately, and on the client side the only thing // that leads to the UserJoinInfo being deleted is when the // document is removed and we are unsubscribed from the // session, in which case we do not care about the user join // anymore anyway. // However, it would be good to handle this, just in case. } if(m_error != NULL) g_error_free(m_error); g_object_unref(m_proxy); } void Gobby::UserJoin::UserJoin::on_synchronization_complete() { // Disconnect signal handler, so that we don't get notified when // syncing this document in running state to another location // or server. InfSession* session; g_object_get(G_OBJECT(m_proxy), "session", &session, NULL); g_signal_handler_disconnect( session, m_synchronization_complete_handler); m_synchronization_complete_handler = 0; g_object_unref(session); // Attempt user join after synchronization attempt_user_join(); } void Gobby::UserJoin::on_user_join_finished(InfUser* user, const GError* error) { if(m_request != NULL) { g_signal_handlers_disconnect_by_func( G_OBJECT(m_request), (gpointer)G_CALLBACK(on_user_join_finished_static), this); g_object_unref(m_request); m_request = NULL; } if(error == NULL) { user_join_complete(user, error); } else if(error->domain == inf_user_error_quark() && error->code == INF_USER_ERROR_NAME_IN_USE) { // If name is in use retry with alternative user name ++m_retry_index; attempt_user_join(); } else { user_join_complete(user, error); } } void Gobby::UserJoin::attempt_user_join() { // Check if there is already a local user, for example for a // synced-in document. InfSession* session; g_object_get(G_OBJECT(m_proxy), "session", &session, NULL); InfUserTable* user_table = inf_session_get_user_table(session); InfUser* user = NULL; inf_user_table_foreach_local_user(user_table, retr_local_user_func, &user); g_object_unref(session); if(user != NULL) { user_join_complete(user, NULL); return; } // Next, check whether we are allowed to join a user if(m_node.get_browser() && m_node.get_browser_iter()) { InfBrowser* browser = m_node.get_browser(); const InfBrowserIter* iter = m_node.get_browser_iter(); const InfAclAccount* account = inf_browser_get_acl_local_account(browser); const InfAclAccountId acc_id = (account != NULL) ? account->id : 0; InfAclMask msk; inf_acl_mask_set1(&msk, INF_ACL_CAN_JOIN_USER); if(!inf_browser_check_acl(browser, iter, acc_id, &msk, NULL)) { GError* error = NULL; g_set_error( &error, inf_request_error_quark(), INF_REQUEST_ERROR_NOT_AUTHORIZED, "%s", inf_request_strerror( INF_REQUEST_ERROR_NOT_AUTHORIZED)); user_join_complete(NULL, error); g_error_free(error); return; } } // We are allowed, so attempt to join the user now. std::vector params = m_param_provider->get_user_join_parameters(); std::vector::iterator name_index = find_name_param(params); const gchar* name = g_value_get_string(&name_index->value); if(m_retry_index > 1) { gchar* new_name = g_strdup_printf( "%s %u", name, m_retry_index); g_value_take_string(&name_index->value, new_name); } GError* error = NULL; InfRequest* request = inf_session_proxy_join_user( m_proxy, params.size(), ¶ms[0], on_user_join_finished_static, this); for(unsigned int i = 0; i < params.size(); ++i) g_value_unset(¶ms[i].value); if(request != NULL) { m_request = request; g_object_ref(m_request); } } void Gobby::UserJoin::user_join_complete(InfUser* user, const GError* error) { g_assert(m_request == NULL); g_assert(m_user == NULL && m_error == NULL); m_user = user; if(error) m_error = g_error_copy(error); m_signal_finished.emit(m_user, m_error); } gobby-0.5.0/code/core/closableframe.hpp0000644000175000017500000000267712370427450014731 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CLOSABLE_FRAME_HPP_ #define _GOBBY_CLOSABLE_FRAME_HPP_ #include "core/preferences.hpp" #include #include namespace Gobby { class ClosableFrame: public Gtk::Frame { public: ClosableFrame(const Glib::ustring& title, const Gtk::StockID& stock_id, Preferences::Option& option); void set_allow_visible(bool allow_visible); protected: virtual void on_add(Gtk::Widget* widget); void on_clicked(); void on_option(); Preferences::Option& m_option; Gtk::VBox m_box; bool m_allow_visible; }; } #endif // _GOBBY_CLOSABLE_FRAME_HPP_ gobby-0.5.0/code/core/documentinfostorage.cpp0000644000175000017500000002136512370427450016177 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/documentinfostorage.hpp" #include "util/file.hpp" #include "features.hpp" #include #include #include #include namespace { Gobby::DocumentInfoStorage::EolStyle eol_style_from_text(const std::string& text) { if(text == "cr") return Gobby::DocumentInfoStorage::EOL_CR; if(text == "lf") return Gobby::DocumentInfoStorage::EOL_LF; if(text == "crlf") return Gobby::DocumentInfoStorage::EOL_CRLF; // Fallback: return Gobby::DocumentInfoStorage::EOL_LF; } std::string eol_style_to_text(Gobby::DocumentInfoStorage::EolStyle style) { switch(style) { case Gobby::DocumentInfoStorage::EOL_CR: return "cr"; case Gobby::DocumentInfoStorage::EOL_LF: return "lf"; case Gobby::DocumentInfoStorage::EOL_CRLF: return "crlf"; default: return "lf"; } } std::string load_document(xmlpp::Element* node, Gobby::DocumentInfoStorage::Info& info) { std::string root; xmlpp::Node::NodeList list = node->get_children(); for(xmlpp::Node::NodeList::iterator iter = list.begin(); iter != list.end(); ++ iter) { xmlpp::Element* child = dynamic_cast(*iter); if(child == NULL) continue; xmlpp::TextNode* text = child->get_child_text(); if(text == NULL) continue; if(child->get_name() == "root") root = text->get_content(); else if(child->get_name() == "uri") info.uri = text->get_content(); else if(child->get_name() == "eol-style") info.eol_style = eol_style_from_text( text->get_content()); else if(child->get_name() == "encoding") info.encoding = text->get_content(); } return root; } // Location to store the documents file: std::string filename() { return Gobby::config_filename("documents.xml"); } } class Gobby::DocumentInfoStorage::BrowserConn { public: BrowserConn(DocumentInfoStorage& storage, InfBrowser* browser): m_browser(browser) { m_begin_explore_handler = g_signal_connect(G_OBJECT(browser), "begin-request::explore-node", G_CALLBACK(on_begin_request_explore_node_static), &storage); m_node_removed_handler = g_signal_connect(G_OBJECT(browser), "node-removed", G_CALLBACK(on_node_removed_static), &storage); } ~BrowserConn() { g_signal_handler_disconnect(m_browser, m_begin_explore_handler); g_signal_handler_disconnect(m_browser, m_node_removed_handler); } private: InfBrowser* m_browser; gulong m_begin_explore_handler; gulong m_node_removed_handler; }; Gobby::DocumentInfoStorage::DocumentInfoStorage(InfGtkBrowserModel* model): m_model(model) { xmlpp::DomParser parser; try { parser.parse_file(filename()); xmlpp::Document* document = parser.get_document(); if(document) { xmlpp::Element* root = document->get_root_node(); if(root) { init(root); } } } catch(xmlpp::exception& e) { // Could not read file, ignore } g_object_ref(m_model); m_set_browser_handler = g_signal_connect( G_OBJECT(m_model), "set-browser", G_CALLBACK(&on_set_browser_static), this); } Gobby::DocumentInfoStorage::~DocumentInfoStorage() { try { create_directory_with_parents( Glib::path_get_dirname(filename()), 0700); xmlpp::Document document; xmlpp::Element* root = document.create_root_node("documents"); for(InfoMap::iterator iter = m_infos.begin(); iter != m_infos.end(); ++ iter) { xmlpp::Element* child = root->add_child("document"); xmlpp::Element* root_child = child->add_child("root"); root_child->set_child_text(iter->first); xmlpp::Element* uri_child = child->add_child("uri"); uri_child->set_child_text(iter->second.uri); xmlpp::Element* eol_style_child = child->add_child("eol-style"); eol_style_child->set_child_text( eol_style_to_text(iter->second.eol_style)); xmlpp::Element* encoding_child = child->add_child("encoding"); encoding_child->set_child_text(iter->second.encoding); } document.write_to_file_formatted(filename()); } catch(Glib::Exception& e) { g_warning("Could not write documents file: %s", e.what().c_str()); } catch(std::exception& e) { g_warning("Could not write documents file: %s", e.what()); } g_signal_handler_disconnect(m_model, m_set_browser_handler); g_object_unref(m_model); for(BrowserMap::iterator iter = m_browsers.begin(); iter != m_browsers.end(); ++ iter) { delete iter->second; } } void Gobby::DocumentInfoStorage::init(xmlpp::Element* node) { xmlpp::Node::NodeList list = node->get_children(); for(xmlpp::Node::NodeList::iterator iter = list.begin(); iter != list.end(); ++ iter) { xmlpp::Element* child = dynamic_cast(*iter); if(child == NULL) continue; if(child->get_name() == "document") { Info info; std::string root = load_document(child, info); m_infos[root] = info; } } } std::string Gobby::DocumentInfoStorage::get_key(InfBrowser* browser, const InfBrowserIter* iter) const { std::string prefix; if(INFC_IS_BROWSER(browser)) { InfXmlConnection* connection = infc_browser_get_connection(INFC_BROWSER(browser)); g_assert(connection != NULL); gchar* remote_id; g_object_get( G_OBJECT(connection), "remote-id", &remote_id, NULL); prefix = remote_id; g_free(remote_id); } else { prefix = "selfhosted"; } gchar* path = inf_browser_get_path(browser, iter); std::string result = prefix + "?" + path; g_free(path); return result; } const Gobby::DocumentInfoStorage::Info* Gobby::DocumentInfoStorage::get_info(InfBrowser* browser, const InfBrowserIter* iter) const { return get_info(get_key(browser, iter)); } const Gobby::DocumentInfoStorage::Info* Gobby::DocumentInfoStorage::get_info(const std::string& key) const { InfoMap::const_iterator map_iter = m_infos.find(key); if(map_iter != m_infos.end()) return &map_iter->second; return NULL; } void Gobby::DocumentInfoStorage::set_info(InfBrowser* browser, const InfBrowserIter* iter, const Info& info) { set_info(get_key(browser, iter), info); } void Gobby::DocumentInfoStorage::set_info(const std::string& key, const Info& info) { m_infos[key] = info; } void Gobby::DocumentInfoStorage::on_set_browser(GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser) { if(old_browser != NULL) { BrowserMap::iterator iter = m_browsers.find(old_browser); g_assert(iter != m_browsers.end()); delete iter->second; m_browsers.erase(iter); } if(new_browser != NULL) { g_assert(m_browsers.find(new_browser) == m_browsers.end()); m_browsers[new_browser] = new BrowserConn(*this, new_browser); // TODO: Remove all infos that refer to no longer existing // documents in all explored directories in browser. Also // add all existing explore requests, to check // subdirectories when the explore finishes (see // on_begin_request_explore_node). } } void Gobby::DocumentInfoStorage:: on_begin_request_explore_node(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request) { // TODO: When request has finished, remove all infos that refer to // no longer existing documents in the explored directory. } void Gobby::DocumentInfoStorage::on_node_removed(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request) { // Remove info when the corresponding document is removed. std::string key = get_key(browser, iter); InfoMap::iterator map_iter = m_infos.find(key); if(map_iter != m_infos.end()) m_infos.erase(map_iter); } gobby-0.5.0/code/core/nodewatch.cpp0000644000175000017500000000472112370427450014071 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/nodewatch.hpp" Gobby::NodeWatch::NodeWatch(InfBrowser* browser, const InfBrowserIter* iter): m_browser(browser), m_node_removed_handler(0) { if(iter != NULL) m_iter = *iter; else m_iter.node = NULL; // TODO: (weak-)ref browser? InfBrowserStatus status; g_object_get(G_OBJECT(m_browser), "status", &status, NULL); g_assert(status == INF_BROWSER_OPEN); m_notify_status_handler = g_signal_connect( browser, "notify::status", G_CALLBACK(on_notify_status_static), this); if(m_iter.node != NULL) { m_node_removed_handler = g_signal_connect( m_browser, "node-removed", G_CALLBACK(on_node_removed_static), this); } } Gobby::NodeWatch::~NodeWatch() { if(m_browser != NULL) reset(); } void Gobby::NodeWatch::on_notify_status() { InfBrowserStatus status; g_object_get(G_OBJECT(m_browser), "status", &status, NULL); // Connection was closed: Node is no longer reachable if(status != INF_BROWSER_OPEN) { reset(); m_signal_node_removed.emit(); } } void Gobby::NodeWatch::on_node_removed(InfBrowser* browser, InfBrowserIter* iter, InfRequest* request) { g_assert(browser == m_browser); g_assert(m_iter.node != NULL); if(inf_browser_is_ancestor(m_browser, iter, &m_iter)) { reset(); m_signal_node_removed.emit(); } } void Gobby::NodeWatch::reset() { g_assert(m_browser != NULL); g_signal_handler_disconnect( m_browser, m_notify_status_handler); if(m_node_removed_handler != 0) { g_signal_handler_disconnect( m_browser, m_node_removed_handler); } m_iter.node = NULL; m_browser = NULL; } gobby-0.5.0/code/core/preferences.cpp0000644000175000017500000002142112370427450014412 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "features.hpp" #include "core/preferences.hpp" #include "util/file.hpp" #include #include #include #include // TODO: Support direct enum config storage via context specialization for // enums. Gobby::Preferences::User::User(Config::ParentEntry& entry): name(entry.get_value("name", Glib::get_user_name())), hue(entry.get_value("hue", Glib::Rand().get_double())), alpha(entry.get_value("alpha", 1.0)), show_remote_cursors(entry.get_value( "show-remote-cursors", true)), show_remote_selections(entry.get_value( "show-remote-selections", true)), show_remote_current_lines(entry.get_value( "show-remote-current-lines", true)), show_remote_cursor_positions(entry.get_value( "show-remote-cursor-positions", true)), allow_remote_access(entry.get_value( "allow-remote-access", true)), require_password(entry.get_value( "require-password", false)), password(entry.get_value( "password")), port(entry.get_value( "port", inf_protocol_get_default_port())), keep_local_documents(entry.get_value( "keep-local-documents", true)), host_directory(entry.get_value("host-directory", config_filename("local-documents"))) { } void Gobby::Preferences::User::serialize(Config::ParentEntry& entry) const { entry.set_value("name", name); entry.set_value("hue", hue); entry.set_value("alpha", alpha); entry.set_value("show-remote-cursors", show_remote_cursors); entry.set_value("show-remote-selections", show_remote_selections); entry.set_value("show-remote-current-lines", show_remote_current_lines); entry.set_value("show-remote-cursor-positions", show_remote_cursor_positions); entry.set_value("allow-remote-access", allow_remote_access); entry.set_value("require-password", require_password); entry.set_value("password", password), entry.set_value("port", port); entry.set_value("keep-local-documents", keep_local_documents); entry.set_value("host-directory", host_directory); } Gobby::Preferences::Editor::Editor(Config::ParentEntry& entry): tab_width(entry.get_value("tab-width", 8)), tab_spaces(entry.get_value("tab-insert-spaces", false)), indentation_auto(entry.get_value("auto-indentation", true)), homeend_smart(entry.get_value("smart-homeend", false) ), autosave_enabled(entry.get_value("autosave-enabled", false) ), autosave_interval( entry.get_value("autosave-interval", 10)) { } void Gobby::Preferences::Editor::serialize(Config::ParentEntry& entry) const { entry.set_value("tab-width", tab_width); entry.set_value("tab-insert-spaces", tab_spaces); entry.set_value("auto-indentation", indentation_auto); entry.set_value("smart-homeend", homeend_smart); entry.set_value("autosave-enabled", autosave_enabled); entry.set_value("autosave-interval", autosave_interval); } Gobby::Preferences::View::View(Config::ParentEntry& entry): wrap_mode(static_cast(entry.get_value( "wrap-mode", static_cast(Gtk::WRAP_WORD_CHAR)))), linenum_display(entry.get_value("display-line-numbers", true)), curline_highlight(entry.get_value( "highlight-current-line", true)), margin_display(entry.get_value("margin-display", true) ), margin_pos(entry.get_value("margin-position", 80) ), bracket_highlight(entry.get_value( "highlight-matching-brackets", true)), whitespace_display(static_cast( entry.get_value("display-whitespace", 0))) { } void Gobby::Preferences::View::serialize(Config::ParentEntry& entry) const { entry.set_value("wrap-mode", static_cast(wrap_mode)); entry.set_value("display-line-numbers", linenum_display); entry.set_value("highlight-current-line", curline_highlight); entry.set_value("margin-display", margin_display); entry.set_value("margin-position", margin_pos); entry.set_value("highlight-matching-brackets", bracket_highlight); entry.set_value("display-whitespace", static_cast(whitespace_display)); } Gobby::Preferences::Appearance::Appearance(Config::ParentEntry& entry): toolbar_style(static_cast(entry.get_value( "toolbar-style", static_cast(Gtk::TOOLBAR_BOTH)))), font(Pango::FontDescription(entry.get_value( "font", "Monospace 10"))), scheme_id(entry.get_value("scheme-id", "classic")), document_userlist_width(entry.get_value( "document-userlist-width", 150)), chat_userlist_width(entry.get_value( "chat-userlist-width", 150)), show_toolbar(entry.get_value("show-toolbar", true)), show_statusbar(entry.get_value("show-statusbar", true)), show_browser(entry.get_value("show-browser", true)), show_chat(entry.get_value("show-chat", true)), show_document_userlist(entry.get_value( "show-document-userlist", true)), show_chat_userlist(entry.get_value( "show-chat-userlist", true)) { } void Gobby::Preferences::Appearance:: serialize(Config::ParentEntry& entry) const { entry.set_value("toolbar-style", static_cast(toolbar_style) ); entry.set_value( "font", static_cast(font).to_string()); entry.set_value("scheme-id", scheme_id); entry.set_value("document-userlist-width", document_userlist_width); entry.set_value("chat-userlist-width", chat_userlist_width); entry.set_value("show-toolbar", show_toolbar); entry.set_value("show-statusbar", show_statusbar); entry.set_value("show-browser", show_browser); entry.set_value("show-chat", show_chat); entry.set_value("show-document-userlist", show_document_userlist); entry.set_value("show-chat-userlist", show_chat_userlist); } Gobby::Preferences::Security::Security(Config::ParentEntry& entry): trust_file(entry.get_value("trust-file")), policy(static_cast( entry.get_value("policy", static_cast( INF_XMPP_CONNECTION_SECURITY_BOTH_PREFER_TLS)))), authentication_enabled( entry.get_value("authentication-enabled", true)), certificate_file(entry.get_value("certificate-file")), key_file(entry.get_value("key-file")) { // Load default trust-file. As this accesses the filesystem, only do // it when we really need it, i.e. when starting Gobby the first time. if(!entry.has_value("trust-file")) { #ifdef G_OS_WIN32 gchar* package_directory = g_win32_get_package_installation_directory_of_module( NULL); trust_file = Glib::build_filename( Glib::build_filename(package_directory, "certs"), "ca-certificates.crt"); g_free(package_directory); #else // This seems to be the default location for both // Debian and Gentoo. I don't know about other distributions. // Maybe they need a distro-patch for this. const std::string DEFAULT_TRUST_FILE = "/etc/ssl/certs/ca-certificates.crt"; if(Glib::file_test(DEFAULT_TRUST_FILE, Glib::FILE_TEST_IS_REGULAR)) { trust_file = DEFAULT_TRUST_FILE; } #endif } } void Gobby::Preferences::Security::serialize(Config::ParentEntry& entry) const { entry.set_value("trust-file", trust_file); entry.set_value("policy", static_cast(policy)); entry.set_value("authentication-enabled", authentication_enabled); entry.set_value("certificate-file", certificate_file); entry.set_value("key-file", key_file); } Gobby::Preferences::Preferences(Config& config): user(config.get_root()["user"]), editor(config.get_root()["editor"]), view(config.get_root()["view"]), appearance(config.get_root()["appearance"]), security(config.get_root()["security"]) { } void Gobby::Preferences::serialize(Config& config) const { // Serialise into config user.serialize(config.get_root()["user"]); editor.serialize(config.get_root()["editor"]); view.serialize(config.get_root()["view"]); appearance.serialize(config.get_root()["appearance"]); security.serialize(config.get_root()["security"]); } gobby-0.5.0/code/core/Makefile.am0000644000175000017500000000365612370530216013446 00000000000000noinst_LIBRARIES = libgobby-core.a libgobby_core_a_SOURCES = \ browser.cpp \ certificatemanager.cpp \ chatsessionview.cpp \ chattablabel.cpp \ closableframe.cpp \ connectionmanager.cpp \ credentialsgenerator.cpp \ documentinfostorage.cpp \ filechooser.cpp \ folder.cpp \ foldermanager.cpp \ header.cpp \ huebutton.cpp \ iconmanager.cpp \ nodewatch.cpp \ noteplugin.cpp \ preferences.cpp \ selfhoster.cpp \ server.cpp \ sessionuserview.cpp \ sessionview.cpp \ statusbar.cpp \ tablabel.cpp \ textsessionuserview.cpp \ textsessionview.cpp \ textundogrouping.cpp \ texttablabel.cpp \ titlebar.cpp \ userjoin.cpp \ userlist.cpp noinst_HEADERS = \ browser.hpp \ certificatemanager.hpp \ chatsessionview.hpp \ chattablabel.hpp \ closableframe.hpp \ connectionmanager.hpp \ credentialsgenerator.hpp \ documentinfostorage.hpp \ filechooser.hpp \ folder.hpp \ foldermanager.hpp \ header.hpp \ huebutton.hpp \ iconmanager.hpp \ nodewatch.hpp \ noteplugin.hpp \ preferences.hpp \ selfhoster.hpp \ server.hpp \ sessionuserview.hpp \ sessionview.hpp \ statusbar.hpp \ tablabel.hpp \ textsessionuserview.hpp \ textsessionview.hpp \ textundogrouping.hpp \ texttablabel.hpp \ titlebar.hpp \ userjoin.hpp \ userlist.hpp appicondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/gobby-0.5 # PRIVATE_ICONS_DIR is required by iconmanager.cpp to get access to the # private icons that are installed into prefix/share/gobby-0.5/icons instead # of prefix/share/icons. We also set PUBLIC_ICONS_DIR explicitely so that # we find the application icon if it is installed in a non-standard prefix. AM_CPPFLAGS = $(gobby_CFLAGS) $(unique_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code \ -DPRIVATE_ICONS_DIR=\""$(datadir)/gobby-0.5/icons"\" \ -DPUBLIC_ICONS_DIR=\""$(datadir)/icons"\" gobby-0.5.0/code/core/connectionmanager.cpp0000644000175000017500000002213112375141745015607 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/connectionmanager.hpp" #include Gobby::ConnectionManager::ConnectionManager(const CertificateManager& manager, const Preferences& preferences): m_cert_manager(manager), m_preferences(preferences), m_io(INF_IO(inf_gtk_io_new())), m_communication_manager(inf_communication_manager_new()), m_xmpp_manager(inf_xmpp_manager_new()), m_sasl_context(NULL) { m_connection_added_handler = g_signal_connect_after( G_OBJECT(m_xmpp_manager), "connection-added", G_CALLBACK(on_connection_added_static), this); m_connection_removed_handler = g_signal_connect_after( G_OBJECT(m_xmpp_manager), "connection-removed", G_CALLBACK(on_connection_removed_static), this); #ifdef LIBINFINITY_HAVE_AVAHI m_discovery = inf_discovery_avahi_new(m_io, m_xmpp_manager, m_cert_manager.get_credentials(), NULL, NULL); // TODO: Should be a constructor argument... inf_discovery_avahi_set_security_policy( m_discovery, m_preferences.security.policy); #endif m_preferences.security.policy.signal_changed().connect( sigc::mem_fun( *this, &ConnectionManager::on_security_policy_changed)); m_cert_manager.signal_credentials_changed().connect( sigc::mem_fun( *this, &ConnectionManager::on_credentials_changed)); } Gobby::ConnectionManager::~ConnectionManager() { #ifdef LIBINFINITY_HAVE_AVAHI g_object_unref(m_discovery); #endif if(m_sasl_context) inf_sasl_context_unref(m_sasl_context); for(std::map::const_iterator it = m_connections.begin(); it != m_connections.end(); ++it) { g_signal_handler_disconnect( G_OBJECT(it->first), it->second.notify_status_handler); } g_signal_handler_disconnect(G_OBJECT(m_xmpp_manager), m_connection_added_handler); g_signal_handler_disconnect(G_OBJECT(m_xmpp_manager), m_connection_removed_handler); g_object_unref(m_xmpp_manager); g_object_unref(m_communication_manager); g_object_unref(m_io); } InfXmppConnection* Gobby::ConnectionManager::make_connection( const std::string& hostname, const std::string& service, unsigned int device_index) { // Check whether we do have such a connection already: InfXmppConnection* xmpp = inf_xmpp_manager_lookup_connection_by_hostname( m_xmpp_manager, hostname.c_str(), service.c_str(), "_infinote._tcp"); if(!xmpp) { InfNameResolver* resolver = inf_name_resolver_new( m_io, hostname.c_str(), service.c_str(), "_infinote._tcp"); InfTcpConnection* connection = inf_tcp_connection_new_resolve( m_io, resolver); g_object_unref(resolver); xmpp = create_connection(connection, device_index, hostname); } else { InfXmlConnectionStatus status; g_object_get(G_OBJECT(xmpp), "status", &status, NULL); if(status == INF_XML_CONNECTION_CLOSED) { GError* error = NULL; inf_xml_connection_open(INF_XML_CONNECTION(xmpp), &error); if(error != NULL) { std::string message = error->message; g_error_free(error); throw std::runtime_error(message); } } } g_assert(xmpp != NULL); return xmpp; } InfXmppConnection* Gobby::ConnectionManager::make_connection( const InfIpAddress* address, guint port, unsigned int device_index, const std::string& hostname) { // Check whether we do have such a connection already: InfXmppConnection* xmpp = inf_xmpp_manager_lookup_connection_by_address( m_xmpp_manager, address, port); if(!xmpp) { InfTcpConnection* connection = inf_tcp_connection_new( m_io, address, port); xmpp = create_connection(connection, device_index, hostname); } else { InfXmlConnectionStatus status; g_object_get(G_OBJECT(xmpp), "status", &status, NULL); if(status == INF_XML_CONNECTION_CLOSED) { GError* error = NULL; inf_xml_connection_open(INF_XML_CONNECTION(xmpp), &error); if(error != NULL) { std::string message = error->message; g_error_free(error); throw std::runtime_error(message); } } } g_assert(xmpp != NULL); return xmpp; } InfXmppConnection* Gobby::ConnectionManager::create_connection(InfTcpConnection* connection, unsigned int device_index, const std::string& hostname) { g_object_set(G_OBJECT(connection), "device-index", device_index, NULL); GError* error = NULL; if(!inf_tcp_connection_open(connection, &error)) { std::string message = error->message; g_error_free(error); g_object_unref(connection); throw std::runtime_error(message); } else { InfXmppConnection* xmpp = inf_xmpp_connection_new( connection, INF_XMPP_CONNECTION_CLIENT, NULL, hostname.c_str(), m_preferences.security.policy, m_cert_manager.get_credentials(), m_sasl_context, m_sasl_mechanisms.empty() ? "" : m_sasl_mechanisms.c_str()); inf_xmpp_manager_add_connection(m_xmpp_manager, xmpp); g_object_unref(xmpp); g_object_unref(connection); return xmpp; } } void Gobby::ConnectionManager::remove_connection(InfXmppConnection* connection) { inf_xmpp_manager_remove_connection( m_xmpp_manager, connection); } void Gobby::ConnectionManager::set_sasl_context(InfSaslContext* sasl_context, const char* mechanisms) { if(m_sasl_context) inf_sasl_context_unref(m_sasl_context); m_sasl_context = sasl_context; if(m_sasl_context) inf_sasl_context_ref(m_sasl_context); m_sasl_mechanisms = mechanisms ? mechanisms : ""; // TODO: Should we also change the SASL context // for existing connections? Doesn't really matter because // SASL context does not change for client side... #ifdef LIBINFINITY_HAVE_AVAHI g_object_set(G_OBJECT(m_discovery), "sasl-context", m_sasl_context, "sasl-mechanisms", mechanisms, NULL); #endif } void Gobby::ConnectionManager::on_connection_added(InfXmppConnection* xmpp) { g_assert(m_connections.find(xmpp) == m_connections.end()); ConnectionInfo info; info.notify_status_handler = g_signal_connect( G_OBJECT(xmpp), "notify::status", G_CALLBACK(on_notify_status_static), this); m_connections[xmpp] = info; } void Gobby::ConnectionManager::on_connection_removed( InfXmppConnection* xmpp, InfXmppConnection* replaced_by) { std::map::iterator iter = m_connections.find(xmpp); g_assert(iter != m_connections.end()); ConnectionInfo& info = iter->second; g_signal_handler_disconnect(G_OBJECT(xmpp), info.notify_status_handler); m_connections.erase(iter); if(replaced_by != NULL) { m_signal_connection_replaced.emit(xmpp, replaced_by); // This is not needed, since the connection will be // removed anyway, because nobody holds a reference // anymore. If it turns out that the connection stays // alive, and for example the certificate dialog shows // up, then it means we have a memory leak somewhere. //inf_xml_connection_close(INF_XML_CONNECTION(xmpp)); } } void Gobby::ConnectionManager::on_security_policy_changed() { #ifdef LIBINFINITY_HAVE_AVAHI inf_discovery_avahi_set_security_policy( m_discovery, m_preferences.security.policy); #endif } void Gobby::ConnectionManager::on_credentials_changed() { // Keep existing connections with current credentials but set // new credentials for all closed connections. for(std::map::const_iterator it = m_connections.begin(); it != m_connections.end(); ++it) { InfXmlConnectionStatus status; g_object_get(G_OBJECT(it->first), "status", &status, NULL); if(status == INF_XML_CONNECTION_CLOSED) { g_object_set( G_OBJECT(it->first), "credentials", m_cert_manager.get_credentials(), NULL); } } #ifdef LIBINFINITY_HAVE_AVAHI g_object_set( G_OBJECT(m_discovery), "credentials", m_cert_manager.get_credentials(), NULL); #endif } void Gobby::ConnectionManager::on_notify_status(InfXmppConnection* connection) { InfXmlConnectionStatus status; g_object_get(G_OBJECT(connection), "status", &status, NULL); // When the connection was closed, update the certificate credentials, // so that in case it is reopened the current credentials are used. if(status == INF_XML_CONNECTION_CLOSED) { g_object_set( G_OBJECT(connection), "credentials", m_cert_manager.get_credentials(), NULL); } } gobby-0.5.0/code/core/chatsessionview.cpp0000644000175000017500000000364212370427450015334 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/chatsessionview.hpp" Gobby::ChatSessionView::ChatSessionView(InfChatSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname, Preferences& preferences): SessionView(INF_SESSION(session), title, path, hostname), m_preferences(preferences), m_chat(INF_GTK_CHAT(inf_gtk_chat_new())) { inf_gtk_chat_set_session(m_chat, session); gtk_widget_show(GTK_WIDGET(m_chat)); gtk_box_pack_start(GTK_BOX(gobj()), GTK_WIDGET(m_chat), TRUE, TRUE, 0); } InfUser* Gobby::ChatSessionView::get_active_user() const { return inf_gtk_chat_get_active_user(m_chat); } void Gobby::ChatSessionView::set_active_user(InfUser* user) { g_assert( user == NULL || inf_user_table_lookup_user_by_id( inf_session_get_user_table(INF_SESSION(m_session)), inf_user_get_id(INF_USER(user))) == INF_USER(user)); inf_gtk_chat_set_active_user(m_chat, user); active_user_changed(user); } gobby-0.5.0/code/core/certificatemanager.cpp0000644000175000017500000002766212370427450015743 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/certificatemanager.hpp" #include "util/file.hpp" #include "util/i18n.hpp" #include #include Gobby::CertificateManager::CertificateManager(Preferences& preferences): m_preferences(preferences), m_dh_params(NULL), m_key(NULL), m_certificates(NULL), m_credentials(NULL), m_key_error(NULL), m_certificate_error(NULL), m_trust_error(NULL) { m_conn_key_file = m_preferences.security.key_file. signal_changed().connect(sigc::mem_fun( *this, &CertificateManager::on_key_file_changed)); m_conn_certificate_file = m_preferences.security.certificate_file. signal_changed().connect(sigc::mem_fun( *this, &CertificateManager::on_certificate_file_changed)); m_preferences.security.trust_file.signal_changed().connect( sigc::mem_fun( *this, &CertificateManager::on_trust_file_changed)); m_preferences.security.authentication_enabled. signal_changed().connect( sigc::mem_fun( *this, &CertificateManager:: on_authentication_enabled_changed)); // TODO: Load these only on request, to improve the startup time load_dh_params(); load_key(); load_certificate(); load_trust(); make_credentials(); } Gobby::CertificateManager::~CertificateManager() { if(m_credentials != NULL) inf_certificate_credentials_unref(m_credentials); for(unsigned int i = 0; i < m_trust.size(); ++i) gnutls_x509_crt_deinit(m_trust[i]); if(m_certificates != NULL) inf_certificate_chain_unref(m_certificates); if(m_key != NULL) gnutls_x509_privkey_deinit(m_key); if(m_dh_params != NULL) gnutls_dh_params_deinit(m_dh_params); } void Gobby::CertificateManager::set_dh_params(gnutls_dh_params_t dh_params) { gnutls_dh_params_t old_dh_params = m_dh_params; GError* error = NULL; std::string filename = config_filename("dh_params.pem"); inf_cert_util_write_dh_params(dh_params, filename.c_str(), &error); if(error != NULL) { g_warning( _("Failed to write Diffie-Hellman parameters " "to \"%s\": %s"), filename.c_str(), error->message); g_error_free(error); } m_dh_params = dh_params; make_credentials(); // TODO: Note that the credentials do only store a pointer to the // DH params, so we cannot just delete the DH params here, since the // old credentials might still be in use. // For the moment we don't let this happen -- in principle it should // not happen; once we have valid DH params at one point we don't // need to change them again. // For the future maybe it could make sense to store the DH params // in the InfCertificateCredentials struct, so that their lifetime // is coupled. g_assert(old_dh_params == NULL); } void Gobby::CertificateManager::set_private_key(gnutls_x509_privkey_t key, const GError* error) { g_assert(key == NULL || error == NULL); gnutls_x509_privkey_t old_key = m_key; InfCertificateChain* old_certificates = m_certificates; if(old_certificates != NULL) inf_certificate_chain_ref(old_certificates); m_key = key; if(m_key_error != NULL) g_error_free(m_key_error); if(error != NULL) m_key_error = g_error_copy(error); else m_key_error = NULL; // Attempt to re-load the certificate if there was an error -- maybe // the new key fixes the problem. This makes sure that if the new key // is compatible to the certificate, the certificate is loaded. // TODO: It would be nicer to still keep the certificate in memory // when it does not match the key, so we don't need to re-load it. // Basically we just need to be able to handle the case when both // cert_error and certificate itself are non-NULL. if(m_certificate_error != NULL) { load_certificate(); } else { check_certificate_signature(); make_credentials(); } // Note that this relies on the fact that // gnutls_certificate_set_x509_key makes a copy of the key // and certificate if(old_certificates != NULL) inf_certificate_chain_unref(old_certificates); if(old_key != NULL) gnutls_x509_privkey_deinit(old_key); } void Gobby::CertificateManager::set_private_key(gnutls_x509_privkey_t key, const char* filename, const GError* error) { if(error != NULL) { g_assert(key == NULL); set_private_key(NULL, error); } else { GError* local_error = NULL; if(filename != NULL) { m_conn_key_file.block(); m_preferences.security.key_file = filename; m_conn_key_file.unblock(); if(key != NULL) { inf_cert_util_write_private_key( key, filename, &local_error); } } if(local_error != NULL) { set_private_key(NULL, local_error); if(key != NULL) gnutls_x509_privkey_deinit(key); g_error_free(local_error); } else { set_private_key(key, NULL); } } } void Gobby::CertificateManager::set_certificates(gnutls_x509_crt_t* certs, guint n_certs, const GError* error) { g_assert(n_certs == 0 || error == NULL); InfCertificateChain* old_certificates = m_certificates; m_certificates = NULL; if(n_certs > 0) m_certificates = inf_certificate_chain_new(certs, n_certs); else m_certificates = NULL; if(m_certificate_error != NULL) g_error_free(m_certificate_error); if(error != NULL) m_certificate_error = g_error_copy(error); else m_certificate_error = NULL; check_certificate_signature(); make_credentials(); // Note that this relies on the fact that // gnutls_certificate_set_x509_key makes a copy of the certificates if(old_certificates != NULL) inf_certificate_chain_unref(old_certificates); } void Gobby::CertificateManager::set_certificates(gnutls_x509_crt_t* certs, guint n_certs, const char* filename, const GError* error) { if(error != NULL) { g_assert(n_certs == 0); set_certificates(NULL, 0, error); } else { GError* local_error = NULL; if(filename != NULL) { m_conn_certificate_file.block(); m_preferences.security.certificate_file = filename; m_conn_certificate_file.unblock(); if(n_certs > 0) { inf_cert_util_write_certificate( certs, n_certs, filename, &local_error); } } if(local_error != NULL) { set_certificates(NULL, 0, local_error); for(guint i = 0; i < n_certs; ++i) gnutls_x509_crt_deinit(certs[i]); g_error_free(local_error); } else { set_certificates(certs, n_certs, NULL); } } } void Gobby::CertificateManager::load_dh_params() { const std::string filename = config_filename("dh_params.pem"); GError* error = NULL; gnutls_dh_params_t dh_params = inf_cert_util_read_dh_params(filename.c_str(), &error); if(error != NULL) { if(error->domain != G_FILE_ERROR || error->code != G_FILE_ERROR_NOENT) { g_warning(_("Failed to read Diffie-Hellman " "parameters: %s"), error->message); } g_error_free(error); } if(dh_params != NULL) set_dh_params(dh_params); } void Gobby::CertificateManager::load_key() { const std::string& filename = m_preferences.security.key_file; if(!filename.empty()) { GError* error = NULL; gnutls_x509_privkey_t key = inf_cert_util_read_private_key( filename.c_str(), &error); set_private_key(key, error); if(error != NULL) g_error_free(error); } else { set_private_key(NULL, NULL); } } void Gobby::CertificateManager::load_certificate() { const std::string& filename = m_preferences.security.certificate_file; if(!filename.empty()) { GError* error = NULL; GPtrArray* array = inf_cert_util_read_certificate( filename.c_str(), NULL, &error); if(array != NULL) { g_assert(error == NULL); guint n_certs = array->len; gnutls_x509_crt_t* certs = reinterpret_cast( g_ptr_array_free(array, FALSE)); if(n_certs > 0) { set_certificates(certs, n_certs, NULL); } else { g_set_error( &error, g_quark_from_static_string( "GOBBY_CERTIFICATE_MANAGER_" "ERROR"), 1, "%s", _("File does not contain a " "X.509 certificate") ); set_certificates(NULL, 0, error); g_error_free(error); g_free(certs); } } else { g_assert(error != NULL); set_certificates(NULL, 0, error); g_error_free(error); } } else { set_certificates(NULL, 0, NULL); } } void Gobby::CertificateManager::load_trust() { std::vector old_trust; old_trust.swap(m_trust); GError* error = NULL; const std::string& filename = m_preferences.security.trust_file; if(!filename.empty()) { GPtrArray* array = inf_cert_util_read_certificate( filename.c_str(), NULL, &error); if(array != NULL) { guint n_certs = array->len; gnutls_x509_crt_t* certs = reinterpret_cast( g_ptr_array_free(array, FALSE)); m_trust.assign(certs, certs + n_certs); g_free(certs); } } if(m_trust_error != NULL) g_error_free(m_trust_error); m_trust_error = error; make_credentials(); // Note that this relies on the fact that // gnutls_certificate_set_x509_trust makes a copy of the certificates for(unsigned int i = 0; i < old_trust.size(); ++i) gnutls_x509_crt_deinit(old_trust[i]); } void Gobby::CertificateManager::check_certificate_signature() { if(!m_key || !m_certificates) return; g_assert(m_key_error == NULL && m_certificate_error == NULL); gnutls_x509_crt_t crt = inf_certificate_chain_get_own_certificate(m_certificates); if(!inf_cert_util_check_certificate_key(crt, m_key)) { inf_certificate_chain_unref(m_certificates); m_certificates = NULL; g_set_error( &m_certificate_error, g_quark_from_static_string( "GOBBY_CERTIFICATE_MANAGER_ERROR"), 0, "%s", _("Certificate does not belong to the chosen key") ); } } void Gobby::CertificateManager::make_credentials() { InfCertificateCredentials* creds = inf_certificate_credentials_new(); gnutls_certificate_credentials_t gnutls_creds = inf_certificate_credentials_get(creds); if(m_preferences.security.authentication_enabled && m_key != NULL && m_certificates != NULL) { gnutls_certificate_set_x509_key( gnutls_creds, inf_certificate_chain_get_raw(m_certificates), inf_certificate_chain_get_n_certificates(m_certificates), m_key ); } if(!m_trust.empty()) { gnutls_certificate_set_x509_trust( gnutls_creds, &m_trust[0], m_trust.size() ); } if(m_dh_params != NULL) gnutls_certificate_set_dh_params(gnutls_creds, m_dh_params); gnutls_certificate_set_verify_flags( gnutls_creds, GNUTLS_VERIFY_ALLOW_X509_V1_CA_CRT); InfCertificateCredentials* old_creds = m_credentials; m_credentials = creds; m_signal_credentials_changed.emit(); if(old_creds != NULL) inf_certificate_credentials_unref(old_creds); } void Gobby::CertificateManager::on_key_file_changed() { load_key(); //make_credentials(); } void Gobby::CertificateManager::on_certificate_file_changed() { load_certificate(); //make_credentials(); } void Gobby::CertificateManager::on_trust_file_changed() { load_trust(); //make_credentials(); } void Gobby::CertificateManager::on_authentication_enabled_changed() { make_credentials(); } gobby-0.5.0/code/core/tablabel.cpp0000644000175000017500000001130312370427450013655 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/tablabel.hpp" #include "core/folder.hpp" #include "util/gtk-compat.hpp" #include Gobby::TabLabel::TabLabel(Folder& folder, SessionView& view, Gtk::StockID active_icon): Gtk::HBox(false, 6), m_folder(folder), m_view(view), m_title(view.get_title()), m_changed(false), m_active_icon(active_icon) { m_title.set_alignment(GtkCompat::ALIGN_LEFT); update_icon(); update_color(); m_icon.show(); m_title.show(); m_extra.show(); m_button.show(); view.signal_active_user_changed().connect( sigc::mem_fun(*this, &TabLabel::on_active_user_changed)); m_notify_status_handle = g_signal_connect( G_OBJECT(view.get_session()), "notify::status", G_CALLBACK(on_notify_status_static), this); m_notify_subscription_group_handle = g_signal_connect( G_OBJECT(view.get_session()), "notify::subscription-group", G_CALLBACK(on_notify_subscription_group_static), this); m_folder.signal_document_changed().connect( sigc::mem_fun(*this, &TabLabel::on_folder_document_changed)); pack_start(m_icon, Gtk::PACK_SHRINK); pack_start(m_title, Gtk::PACK_SHRINK); pack_start(m_extra, Gtk::PACK_EXPAND_WIDGET); pack_end(m_button, Gtk::PACK_SHRINK); } Gobby::TabLabel::~TabLabel() { g_signal_handler_disconnect(m_view.get_session(), m_notify_status_handle); g_signal_handler_disconnect(m_view.get_session(), m_notify_subscription_group_handle); } void Gobby::TabLabel::on_folder_document_changed(SessionView* view) { if(view == &m_view) on_activate(); } void Gobby::TabLabel::on_active_user_changed(InfUser* user) { update_icon(); } void Gobby::TabLabel::on_notify_status() { update_icon(); update_color(); } void Gobby::TabLabel::on_notify_subscription_group() { update_icon(); update_color(); } void Gobby::TabLabel::on_activate() { m_changed = false; update_color(); } void Gobby::TabLabel::set_changed() { if(m_folder.get_current_document() != &m_view) { m_changed = true; update_color(); } } void Gobby::TabLabel::update_icon() { InfSession* session = INF_SESSION(m_view.get_session()); if(inf_session_get_subscription_group(session) == NULL) { m_icon.set(Gtk::Stock::DISCONNECT, Gtk::ICON_SIZE_MENU); } else { switch(inf_session_get_status(session)) { case INF_SESSION_PRESYNC: case INF_SESSION_SYNCHRONIZING: m_icon.set(Gtk::Stock::EXECUTE, Gtk::ICON_SIZE_MENU); break; case INF_SESSION_RUNNING: if(m_view.get_active_user() != NULL) { m_icon.set(m_active_icon, Gtk::ICON_SIZE_MENU); } else { m_icon.set(Gtk::Stock::FILE, Gtk::ICON_SIZE_MENU); } break; case INF_SESSION_CLOSED: m_icon.set(Gtk::Stock::STOP, Gtk::ICON_SIZE_MENU); break; } } } void Gobby::TabLabel::update_color() { InfSession* session = INF_SESSION(m_view.get_session()); if(m_changed) { // Document has changed: awareness -> red #ifdef USE_GTKMM3 m_title.override_color(Gdk::RGBA("#c00000")); #else m_title.modify_fg(Gtk::STATE_NORMAL, Gdk::Color("#c00000")); m_title.modify_fg(Gtk::STATE_ACTIVE, Gdk::Color("#c00000")); #endif } else if(inf_session_get_subscription_group(session) == NULL || inf_session_get_status(session) != INF_SESSION_RUNNING) { // Document disconnected or not yet running // (most probably synchronizing): not (yet) available -> grey #ifdef USE_GTKMM3 m_title.override_color(Gdk::RGBA("#606060")); #else m_title.modify_fg(Gtk::STATE_NORMAL, Gdk::Color("#606060")); m_title.modify_fg(Gtk::STATE_ACTIVE, Gdk::Color("#606060")); #endif } else { // Otherwise default #ifdef USE_GTKMM3 m_title.unset_color(); #else Glib::RefPtr default_style = Gtk::Widget::get_default_style(); m_title.modify_fg( Gtk::STATE_ACTIVE, default_style->get_fg(Gtk::STATE_ACTIVE)); m_title.modify_fg( Gtk::STATE_NORMAL, default_style->get_fg(Gtk::STATE_NORMAL)); #endif } } gobby-0.5.0/code/core/header.cpp0000644000175000017500000005012112370466747013354 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/header.hpp" #include "core/iconmanager.hpp" #include "util/i18n.hpp" #include "features.hpp" // For PLATFORM_OSX_NATIVE #include #include #include #include #ifdef PLATFORM_OSX_NATIVE #include #endif namespace { Glib::ustring ui_desc = "" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " // " " " " " " " " " " " " " " " " " " " " " " " " ""; void show_widget(Gtk::Widget& widget, bool show) { if(show) widget.show(); else widget.hide(); } bool language_sort_func(Glib::RefPtr act1, Glib::RefPtr act2) { // TODO: Speedup by using collation keys? // We should profile first. gchar* casefold1 = g_utf8_casefold( gtk_source_language_get_name( act1->get_language()), -1); gchar* casefold2 = g_utf8_casefold( gtk_source_language_get_name( act2->get_language()), -1); int ret = g_utf8_collate(casefold1, casefold2); g_free(casefold1); g_free(casefold2); return ret < 0; } Gobby::Header::LanguageMap load_highlight_languages(GtkSourceLanguageManager* manager, Gtk::RadioAction::Group& group) { typedef std::map TempLanguageMap; TempLanguageMap map; const gchar* const* language_ids = gtk_source_language_manager_get_language_ids(manager); if(language_ids == NULL) return Gobby::Header::LanguageMap(); for(const gchar* const* id = language_ids; *id != NULL; ++ id) { GtkSourceLanguage* language = gtk_source_language_manager_get_language( manager, *id); if(gtk_source_language_get_hidden(language)) continue; const Glib::ustring name( gtk_source_language_get_name(language)); const Glib::ustring section( gtk_source_language_get_section(language)); map[section].push_back( Gobby::Header::LanguageAction::create( language, group)); } // Copy to map of const lists Gobby::Header::LanguageMap result; for(TempLanguageMap::iterator iter = map.begin(); iter != map.end(); ++ iter) { iter->second.sort(language_sort_func); result.insert(std::make_pair(iter->first, iter->second)); } return result; } } Gobby::Header::Error::Error(Code error_code, const Glib::ustring& error_message) : Glib::Error(g_quark_from_static_string("GOBBY_HEADER_ERROR"), static_cast(error_code), error_message) { } Gobby::Header::Error::Code Gobby::Header::Error::code() const { return static_cast(gobject_->code); } Gobby::Header::LanguageAction::LanguageAction(GtkSourceLanguage* language, Gtk::RadioAction::Group& group): Gtk::RadioAction( group, "ViewHighlightModeLanguage_" + Glib::ustring(language ? gtk_source_language_get_id(language) : "None"), Gtk::StockID(), language ? gtk_source_language_get_name(language) : _("_None")), m_language(language) { } Glib::RefPtr Gobby::Header::LanguageAction::create(GtkSourceLanguage* language, Gtk::RadioAction::Group& group) { return Glib::RefPtr( new LanguageAction(language, group)); } Gobby::Header::Header(Preferences& preferences, GtkSourceLanguageManager* lang_mgr): m_preferences(preferences), m_ui_manager(Gtk::UIManager::create()), group_file(Gtk::ActionGroup::create("MenuFile") ), group_edit(Gtk::ActionGroup::create("MenuEdit") ), group_view(Gtk::ActionGroup::create("MenuView") ), group_help(Gtk::ActionGroup::create("MenuHelp") ), action_file(Gtk::Action::create("MenuFile", _("_File"))), action_file_new(Gtk::Action::create("FileNew", Gtk::Stock::NEW)), action_file_open(Gtk::Action::create("FileOpen", Gtk::Stock::OPEN, _("_Open..."))), action_file_open_location( Gtk::Action::create("FileOpenLocation", _("Open _Location..."))), action_file_save(Gtk::Action::create("FileSave", Gtk::Stock::SAVE)), action_file_save_as( Gtk::Action::create("FileSaveAs", Gtk::Stock::SAVE_AS, _("Save _As..."))), action_file_save_all( Gtk::Action::create( "FileSaveAll", Gobby::IconManager::STOCK_SAVE_ALL, _("Save All"), _("Save all open files locally"))), action_file_export_html( Gtk::Action::create("FileExportHtml", _("Export As _HTML..."))), action_file_connect( Gtk::Action::create("FileConnect", Gtk::Stock::CONNECT, _("Connect _to Server..."))), action_file_close( Gtk::Action::create("FileClose", Gtk::Stock::CLOSE)), action_file_quit(Gtk::Action::create("FileQuit", Gtk::Stock::QUIT)), action_edit(Gtk::Action::create("MenuEdit", _("_Edit"))), action_edit_undo(Gtk::Action::create("EditUndo", Gtk::Stock::UNDO)), action_edit_redo(Gtk::Action::create("EditRedo", Gtk::Stock::REDO)), action_edit_cut(Gtk::Action::create("EditCut", Gtk::Stock::CUT)), action_edit_copy(Gtk::Action::create("EditCopy", Gtk::Stock::COPY)), action_edit_paste( Gtk::Action::create("EditPaste", Gtk::Stock::PASTE)), action_edit_find(Gtk::Action::create("EditFind", Gtk::Stock::FIND, _("_Find..."))), action_edit_find_next( Gtk::Action::create("EditFindNext", _("Find Ne_xt"), _("Find next match of phrase " "searched for"))), action_edit_find_prev( Gtk::Action::create("EditFindPrev", _("Find Pre_vious"), _("Find previous match of phrase " "searched for"))), action_edit_find_replace( Gtk::Action::create("EditFindReplace", Gtk::Stock::FIND_AND_REPLACE, _("Find and Rep_lace..."))), action_edit_goto_line( Gtk::Action::create("EditGotoLine", Gtk::Stock::JUMP_TO, _("Go to _Line..."))), action_edit_preferences( Gtk::Action::create("EditPreferences", Gtk::Stock::PREFERENCES, _("Pr_eferences..."))), action_view(Gtk::Action::create("MenuView", _("_View"))), action_view_hide_user_colors( Gtk::Action::create( "ViewHideUserColors", _("Reset User Colors"), _("Hide user colors in current document"))), action_view_fullscreen( Gtk::ToggleAction::create( "ViewFullscreen", Gtk::Stock::FULLSCREEN, _("Fullscreen"), _("Show the editing window in fullscreen mode"), false)), action_view_zoom_in( Gtk::Action::create( "ViewZoomIn", Gtk::Stock::ZOOM_IN, _("Zoom In"))), action_view_zoom_out( Gtk::Action::create( "ViewZoomOut", Gtk::Stock::ZOOM_OUT, _("Zoom Out"))), action_view_toolbar( Gtk::ToggleAction::create( "ViewToolbar", _("View Toolbar"), _("Whether to show the toolbar"), preferences.appearance.show_toolbar)), action_view_statusbar( Gtk::ToggleAction::create( "ViewStatusbar", _("View Statusbar"), _("Whether to show the statusbar"), preferences.appearance.show_statusbar)), action_view_browser( Gtk::ToggleAction::create( "ViewBrowser", _("View Document Browser"), _("Whether to show the document browser"), preferences.appearance.show_browser)), action_view_chat( Gtk::ToggleAction::create( "ViewChat", _("View Chat"), _("Whether to show the chat pane"), preferences.appearance.show_chat)), action_view_document_userlist( Gtk::ToggleAction::create( "ViewDocumentUserList", _("View Document User List"), _("Whether to show the user list for documents"), preferences.appearance.show_document_userlist)), action_view_chat_userlist( Gtk::ToggleAction::create( "ViewChatUserList", _("View Chat User List"), _("Whether to show the user list for the chat"), preferences.appearance.show_chat_userlist)), action_view_highlight_mode( Gtk::Action::create("ViewHighlightMode", _("_Highlight Mode"))), action_view_highlight_none( LanguageAction::create(NULL, m_highlight_group)), action_view_highlight_languages( load_highlight_languages(lang_mgr, m_highlight_group)), action_help(Gtk::Action::create("MenuHelp", _("_Help")) ), action_help_contents( Gtk::Action::create( "HelpContents", Gtk::Stock::HELP, _("_Contents"), _("Opens the Gobby manual"))), action_help_about( Gtk::Action::create( "HelpAbout", Gtk::Stock::ABOUT, _("_About..."), _("Shows Gobby's copyright and credits"))) { // Add basic menu m_ui_manager->add_ui_from_string(ui_desc); // Set all toolbar actions to be "important", so that their text // shows up in the toolbar when the toolbar style is set to // GTK_TOOLBAR_STYLE_BOTH_HORIZ. action_file_new->set_is_important(true); action_file_open->set_is_important(true); action_file_save->set_is_important(true); action_edit_undo->set_is_important(true); action_edit_redo->set_is_important(true); action_edit_cut->set_is_important(true); action_edit_copy->set_is_important(true); action_edit_paste->set_is_important(true); action_edit_find->set_is_important(true); action_edit_find_replace->set_is_important(true); group_file->add(action_file); group_file->add(action_file_new); group_file->add(action_file_open); group_file->add(action_file_open_location, Gtk::AccelKey("L", "/MenuFile/FileOpenLocation")); group_file->add(action_file_save); group_file->add(action_file_save_as, Gtk::AccelKey("S", "/MenuFile/FileSaveAs")); group_file->add(action_file_save_all, Gtk::AccelKey("L", "/MenuFile/FileSaveAll")); group_file->add(action_file_export_html, Gtk::AccelKey("H", "/MenuFile/FileExportHtml")); group_file->add(action_file_connect, Gtk::AccelKey("T", "/MenuFile/FileConnect")); group_file->add(action_file_close); group_file->add(action_file_quit); group_edit->add(action_edit); group_edit->add(action_edit_undo, Gtk::AccelKey("Z", "/MenuEdit/EditUndo")); group_edit->add(action_edit_redo, Gtk::AccelKey("Z", "/MenuEdit/EditRedo")); group_edit->add(action_edit_cut); group_edit->add(action_edit_copy); group_edit->add(action_edit_paste); group_edit->add(action_edit_find); group_edit->add(action_edit_find_next, Gtk::AccelKey("G", "/MenuEdit/EditFindNext")); group_edit->add(action_edit_find_prev, Gtk::AccelKey("G", "/MenuEdit/EditFindPrev")); group_edit->add(action_edit_find_replace, Gtk::AccelKey("H", "/MenuEdit/EditFindReplace")); group_edit->add(action_edit_goto_line, Gtk::AccelKey("I", "/MenuEdit/EditGotoLine")); group_edit->add(action_edit_preferences); group_view->add(action_view); group_view->add( action_view_hide_user_colors, Gtk::AccelKey("C", "/MenuView/ViewHideUserColors")); group_view->add(action_view_fullscreen, Gtk::AccelKey( "F11", "/MenuView/ViewFullscreen")); group_view->add( action_view_zoom_in, Gtk::AccelKey('+', Gdk::CONTROL_MASK, "/MenuView/ViewZoomIn")); group_view->add( action_view_zoom_out, Gtk::AccelKey('-', Gdk::CONTROL_MASK, "/MenuView/ViewZoomOut")); group_view->add(action_view_toolbar); group_view->add(action_view_statusbar); group_view->add(action_view_browser, Gtk::AccelKey( "F9", "/MenuView/ViewBrowser")); group_view->add(action_view_chat, Gtk::AccelKey( "F9", "/MenuView/ViewChat")); group_view->add(action_view_document_userlist, Gtk::AccelKey( "F9", "/MenuView/ViewDocumentUserList")); group_view->add(action_view_chat_userlist, Gtk::AccelKey( "F9", "/MenuView/ViewChatUserList")); group_view->add(action_view_highlight_mode); group_view->add(action_view_highlight_none); unsigned int language_menu_counter = 0; for(LanguageMap::const_iterator iter = action_view_highlight_languages.begin(); iter != action_view_highlight_languages.end(); ++ iter) { // We cannot use iter->first for the action name, since this // is a localized string. Glib::ustring section_action_name = Glib::ustring::compose("ViewHighlightModeSection_%1", language_menu_counter); ++language_menu_counter; Glib::ustring section_action_xml = Glib::Markup::escape_text(section_action_name); Glib::RefPtr section_action( Gtk::Action::create(section_action_name, iter->first)); group_view->add(section_action); for(LanguageList::const_iterator iter2 = iter->second.begin(); iter2 != iter->second.end(); ++ iter2) { Glib::ustring language_action_xml = Glib::Markup::escape_text( (*iter2)->get_name()); Glib::ustring xml_desc = "" " " " " " " " " " " " " " " " " " " ""; m_ui_manager->add_ui_from_string(xml_desc); group_view->add(*iter2); } } group_help->add(action_help); group_help->add(action_help_contents, Gtk::AccelKey("F1", "/MenuHelp/HelpContents")); group_help->add(action_help_about); m_ui_manager->insert_action_group(group_file); m_ui_manager->insert_action_group(group_edit); m_ui_manager->insert_action_group(group_view); m_ui_manager->insert_action_group(group_help); m_menubar = static_cast( m_ui_manager->get_widget("/MenuMainBar") ); m_toolbar = static_cast( m_ui_manager->get_widget("/ToolMainBar") ); if(m_menubar == NULL) { throw Error( Error::MENUBAR_MISSING, "XML UI definition lacks menubar" ); } if(m_toolbar == NULL) { throw Error( Error::TOOLBAR_MISSING, "XML UI definition lacks toolbar" ); } #ifdef PLATFORM_OSX_NATIVE ige_mac_menu_set_menu_bar(GTK_MENU_SHELL(m_menubar->gobj())); ige_mac_menu_set_quit_menu_item(GTK_MENU_ITEM( m_ui_manager->get_widget( "/MenuMainBar/MenuFile/FileQuit")->gobj())); ige_mac_menu_add_app_menu_item( ige_mac_menu_add_app_menu_group(), GTK_MENU_ITEM( m_ui_manager->get_widget( "/MenuMainBar/MenuHelp/HelpAbout")->gobj()), NULL); ige_mac_menu_add_app_menu_item( ige_mac_menu_add_app_menu_group(), GTK_MENU_ITEM( m_ui_manager->get_widget( "/MenuMainBar/MenuEdit/EditPreferences") ->gobj()), NULL); #else pack_start(*m_menubar, Gtk::PACK_SHRINK); #endif pack_start(*m_toolbar, Gtk::PACK_SHRINK); m_toolbar->set_toolbar_style(preferences.appearance.toolbar_style); m_menubar->show(); if(preferences.appearance.show_toolbar) m_toolbar->show(); else m_toolbar->hide(); preferences.appearance.toolbar_style.signal_changed().connect( sigc::compose( sigc::mem_fun( *m_toolbar, &Gtk::Toolbar::set_toolbar_style), sigc::mem_fun( preferences.appearance.toolbar_style, &Preferences::Option:: operator const Gtk::ToolbarStyle&))); preferences.appearance.show_toolbar.signal_changed().connect( sigc::compose( sigc::bind<0>( sigc::ptr_fun(show_widget), sigc::ref(*m_toolbar)), sigc::mem_fun( preferences.appearance.show_toolbar, &Preferences::Option:: operator const bool&))); } Glib::RefPtr Gobby::Header::get_accel_group() { return m_ui_manager->get_accel_group(); } Glib::RefPtr Gobby::Header::get_accel_group() const { return m_ui_manager->get_accel_group(); } Gtk::MenuBar& Gobby::Header::get_menubar() { return *m_menubar; } Gtk::Toolbar& Gobby::Header::get_toolbar() { return *m_toolbar; } Glib::RefPtr Gobby::Header::lookup_language_action(GtkSourceLanguage* language) { const Glib::ustring section( gtk_source_language_get_section(language)); LanguageMap::const_iterator iter = action_view_highlight_languages.find(section); g_assert(iter != action_view_highlight_languages.end()); const LanguageList& list = iter->second; for(LanguageList::const_iterator iter = list.begin(); iter != list.end(); ++ iter) { const Glib::RefPtr action = *iter; if(action->get_language() == language) return action; } g_assert_not_reached(); return Glib::RefPtr(); } gobby-0.5.0/code/core/noteplugin.hpp0000644000175000017500000000233212370747157014313 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_NOTEPLUGIN_HPP_ #define _GOBBY_NOTEPLUGIN_HPP_ #include #include namespace Gobby { namespace Plugins { extern const InfcNotePlugin* C_TEXT; extern const InfcNotePlugin* C_CHAT; extern const InfdNotePlugin* D_TEXT; extern const InfdNotePlugin* D_CHAT; } } #endif // _GOBBY_NOTEPLUGIN_HPP_ gobby-0.5.0/code/core/chatsessionview.hpp0000644000175000017500000000322712370427450015340 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CHATSESSIONVIEW_HPP_ #define _GOBBY_CHATSESSIONVIEW_HPP_ #include "core/sessionview.hpp" #include "core/preferences.hpp" #include #include namespace Gobby { class ChatSessionView: public SessionView { public: ChatSessionView(InfChatSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname, Preferences& preferences); // Override base class covariantly InfChatSession* get_session() { return INF_CHAT_SESSION(m_session); } InfGtkChat* get_chat() { return m_chat; } virtual InfUser* get_active_user() const; void set_active_user(InfUser* user); protected: Preferences& m_preferences; InfGtkChat* m_chat; }; } #endif // _GOBBY_CHATSESSIONVIEW_HPP_ gobby-0.5.0/code/core/texttablabel.cpp0000644000175000017500000001376112370710527014574 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/texttablabel.hpp" #include "core/folder.hpp" #include Gobby::TextTabLabel::UserWatcher::UserWatcher(TextTabLabel* label, InfTextUser* user): m_label(label), m_user(user) { connect(); } Gobby::TextTabLabel::UserWatcher::UserWatcher(const UserWatcher& other): m_label(other.m_label), m_user(other.m_user) { connect(); } Gobby::TextTabLabel::UserWatcher::~UserWatcher() { g_signal_handler_disconnect(m_user, m_handle); } InfTextUser* Gobby::TextTabLabel::UserWatcher::get_user() const { return m_user; } bool Gobby::TextTabLabel::UserWatcher::operator==(InfTextUser* other_user) const { return m_user == other_user; } void Gobby::TextTabLabel::UserWatcher::connect() { m_handle = g_signal_connect( G_OBJECT(m_user), "notify::hue", G_CALLBACK(&UserWatcher::on_notify_hue), m_label); } void Gobby::TextTabLabel::UserWatcher::on_notify_hue(GObject* user_object, GParamSpec* spec, gpointer user_data) { static_cast(user_data)->update_dots(); } Gobby::TextTabLabel::TextTabLabel(Folder& folder, TextSessionView& view): TabLabel(folder, view, Gtk::Stock::EDIT), m_dot_char(0) { m_modified_changed_handle = g_signal_connect_after( G_OBJECT(view.get_text_buffer()), "modified-changed", G_CALLBACK(on_modified_changed_static), this); InfTextBuffer* buffer = INF_TEXT_BUFFER( inf_session_get_buffer( INF_SESSION(view.get_session()))); m_insert_text_handle = g_signal_connect_after( G_OBJECT(buffer), "text-inserted", G_CALLBACK(on_text_inserted_static), this); m_erase_text_handle = g_signal_connect_after( G_OBJECT(buffer), "text-erased", G_CALLBACK(on_text_erased_static), this); m_extra.pack_start(m_dots, Gtk::PACK_SHRINK); update_modified(); update_dot_char(); } Gobby::TextTabLabel::~TextTabLabel() { TextSessionView& text_view = dynamic_cast(m_view); g_signal_handler_disconnect(text_view.get_text_buffer(), m_modified_changed_handle); InfTextBuffer* buffer = INF_TEXT_BUFFER( inf_session_get_buffer( INF_SESSION(m_view.get_session()))); g_signal_handler_disconnect(buffer, m_erase_text_handle); g_signal_handler_disconnect(buffer, m_insert_text_handle); } #ifdef USE_GTKMM3 void Gobby::TextTabLabel::on_style_updated() #else void Gobby::TextTabLabel::on_style_changed(const Glib::RefPtr& prev) #endif { #ifdef USE_GTKMM3 TabLabel::on_style_updated(); #else TabLabel::on_style_changed(prev); #endif update_dot_char(); } void Gobby::TextTabLabel::on_notify_status() { TabLabel::on_notify_status(); update_modified(); } void Gobby::TextTabLabel::on_activate() { TabLabel::on_activate(); m_changed_by.clear(); update_dots(); } void Gobby::TextTabLabel::on_modified_changed() { update_modified(); } void Gobby::TextTabLabel::on_changed(InfTextUser* author) { if(!m_changed) { InfSession* session = INF_SESSION(m_view.get_session()); if(inf_session_get_status(session) == INF_SESSION_RUNNING) set_changed(); } if(m_folder.get_current_document() != &m_view) { // TODO: remove dot if all the user's // new contributions where undone if(std::find(m_changed_by.begin(), m_changed_by.end(), author) == m_changed_by.end()) { m_changed_by.push_back(UserWatcher(this, author)); update_dots(); } } } void Gobby::TextTabLabel::update_modified() { InfSession* session = INF_SESSION(m_view.get_session()); bool modified = inf_buffer_get_modified(inf_session_get_buffer(session)); InfSessionStatus status = inf_session_get_status(session); if(status == INF_SESSION_SYNCHRONIZING || status == INF_SESSION_PRESYNC) { modified = false; } if(modified) m_title.set_text("*" + m_view.get_title()); else m_title.set_text(m_view.get_title()); } void Gobby::TextTabLabel::update_dot_char() { static const gunichar dot_chars[] = { 0x270E, /* pencil */ 0x26AB, /* medium black circle */ 0x25CF, /* black circle */ 0x002A, /* asterisk */ 0x0000 }; // Find a glyph for the user dots const gunichar* c; for(c = dot_chars; *c; ++c) { m_dots.set_text(Glib::ustring(1, *c)); if(m_dots.get_layout()->get_unknown_glyphs_count() == 0) break; } m_dot_char = *c; // Update dots using this char update_dots(); } void Gobby::TextTabLabel::update_dots() { g_assert(m_dot_char != 0); if (m_changed_by.empty()) { m_dots.hide(); } else { Glib::ustring markup; for(UserWatcherList::iterator iter = m_changed_by.begin(); iter != m_changed_by.end(); ++iter) { double hue = inf_text_user_get_hue(iter->get_user()); Gdk::Color c; c.set_hsv(360.0 * hue, 0.6, 0.6); // We are using the C API here since // gdk_color_to_string is available since GTK 2.12, // but Gdk::Color::to_string only since gtkmm 2.14, // and we want to require nothing more recent than // 2.12 for now. See also bug #447. gchar* color_str = gdk_color_to_string(c.gobj()); Glib::ustring cpp_color_str(color_str); g_free(color_str); markup += "" + m_dot_char + ""; } m_dots.set_markup(markup); m_dots.show(); } } gobby-0.5.0/code/core/texttablabel.hpp0000644000175000017500000000613712370710536014600 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_TEXTTABLABEL_HPP_ #define _GOBBY_TEXTTABLABEL_HPP_ #include "core/textsessionview.hpp" #include "core/tablabel.hpp" #include "util/gtk-compat.hpp" namespace Gobby { class TextTabLabel: public TabLabel { public: TextTabLabel(Folder& folder, TextSessionView& view); ~TextTabLabel(); protected: static void on_modified_changed_static(GtkTextBuffer* buffer, gpointer user_data) { static_cast(user_data)->on_modified_changed(); } static void on_text_erased_static(InfTextBuffer* buffer, guint position, InfTextChunk* chunk, InfTextUser* author, gpointer user_data) { static_cast(user_data)->on_changed(author); } static void on_text_inserted_static(InfTextBuffer* buffer, guint position, InfTextChunk* text, InfTextUser* author, gpointer user_data) { static_cast(user_data)->on_changed(author); } #ifdef USE_GTKMM3 virtual void on_style_updated(); #else virtual void on_style_changed(const Glib::RefPtr& prev); #endif virtual void on_notify_status(); // override virtual void on_activate(); void on_modified_changed(); void on_changed(InfTextUser* author); Gtk::Label m_dots; private: void update_modified(); void update_dot_char(); void update_dots(); gunichar m_dot_char; gulong m_modified_changed_handle; gulong m_erase_text_handle; gulong m_insert_text_handle; class UserWatcher { public: UserWatcher(TextTabLabel* label, InfTextUser* user); UserWatcher(const UserWatcher& other); ~UserWatcher(); InfTextUser* get_user() const; bool operator==(InfTextUser* other_user) const; private: void connect(); void disconnect(); static void on_notify_hue(GObject* user_object, GParamSpec* spec, gpointer user_data); TabLabel* m_label; InfTextUser* m_user; gulong m_handle; }; typedef std::list UserWatcherList; UserWatcherList m_changed_by; }; } #endif // _GOBBY_TEXTTABLABEL_HPP_ gobby-0.5.0/code/core/sessionuserview.hpp0000644000175000017500000000346112370512266015377 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_SESSIONUSERVIEW_HPP_ #define _GOBBY_SESSIONUSERVIEW_HPP_ #include "core/sessionview.hpp" #include "core/preferences.hpp" #include "core/userlist.hpp" #include // Shows a sessionview with a userlist on the right hand side of it namespace Gobby { class SessionUserView: public Gtk::HPaned { public: SessionUserView(SessionView& view, bool show_disconnected, Preferences::Option& userlist_view, Preferences::Option& userlist_width); SessionView& get_session_view() const { return m_view; } protected: virtual void on_size_allocate(Gtk::Allocation& allocation); void on_doc_userlist_width_changed(); void on_pref_userlist_width_changed(); SessionView& m_view; Preferences::Option& m_userlist_width; UserList m_userlist; sigc::connection m_doc_userlist_width_changed_connection; sigc::connection m_pref_userlist_width_changed_connection; }; } #endif // _GOBBY_SESSIONUSERVIEW_HPP_ gobby-0.5.0/code/core/statusbar.cpp0000644000175000017500000002532112375661233014130 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/statusbar.hpp" #include "util/gtk-compat.hpp" #include "util/i18n.hpp" #include #include #include namespace { Gtk::StockID message_type_to_stock_id(Gobby::StatusBar::MessageType type) { switch(type) { case Gobby::StatusBar::INFO: return Gtk::Stock::DIALOG_INFO; case Gobby::StatusBar::ERROR: return Gtk::Stock::DIALOG_ERROR; default: g_assert_not_reached(); } } void dispose_dialog(Gtk::MessageDialog* dialog) { delete dialog; } } class Gobby::StatusBar::Message { public: Message(Gtk::Widget* widget, const Glib::ustring& simple, const Glib::ustring& detail, sigc::connection timeout_conn = sigc::connection()): m_widget(widget), m_timeout_conn(timeout_conn), m_simple_desc(simple), m_detail_desc(detail) { } ~Message() { m_timeout_conn.disconnect(); } void show_dialog() const { Gtk::MessageDialog* dialog = new Gtk::MessageDialog( m_simple_desc, false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_NONE, false); dialog->add_button(Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE); dialog->set_secondary_text(m_detail_desc, true); dialog->signal_response().connect( sigc::hide( sigc::bind( sigc::ptr_fun(dispose_dialog), dialog))); dialog->show(); } bool is_error() { return !m_detail_desc.empty(); } const Glib::ustring& get_simple_text() const { return m_simple_desc; } const Glib::ustring& get_detail_text() const { return m_detail_desc; } Gtk::Widget* widget() const { return m_widget; } protected: Gtk::Widget* m_widget; sigc::connection m_timeout_conn; Glib::ustring m_simple_desc; Glib::ustring m_detail_desc; }; Gobby::StatusBar::StatusBar(Gtk::Window& window, const Folder& folder, const Preferences& preferences): Gtk::HBox(false, 2), m_folder(folder), m_preferences(preferences), m_visible_messages(0), m_current_view(NULL), m_position_context_id(0) { pack_end(m_bar_position, Gtk::PACK_SHRINK); m_bar_position.set_size_request(200, -1); m_bar_position.show(); window.signal_window_state_event().connect( sigc::mem_fun(*this, &StatusBar::on_window_state_event)); m_folder.signal_document_removed().connect( sigc::mem_fun(*this, &StatusBar::on_document_removed)); m_folder.signal_document_changed().connect( sigc::mem_fun(*this, &StatusBar::on_document_changed)); m_preferences.appearance.show_statusbar.signal_changed().connect( sigc::mem_fun(*this, &StatusBar::on_view_changed)); // Initial update on_document_changed(m_folder.get_current_document()); on_view_changed(); } Gobby::StatusBar::~StatusBar() { on_document_changed(NULL); } Gobby::StatusBar::MessageHandle Gobby::StatusBar::add_message(Gobby::StatusBar::MessageType type, const Glib::ustring& message, const Glib::ustring& dialog_message, unsigned int timeout) { if(m_visible_messages >= 12) { for(MessageHandle iter = m_list.begin(); iter != m_list.end(); ++iter) { if(*iter) { if((*iter)->is_error()) remove_message(iter); else // only hide message because whoever // installed it is expecting to be // able to call remove_message on it hide_message(iter); break; } } } Gtk::HBox* bar = Gtk::manage(new Gtk::HBox(false, 6)); Gtk::Image* image = Gtk::manage(new Gtk::Image( message_type_to_stock_id(type), Gtk::ICON_SIZE_MENU)); bar->pack_start(*image, Gtk::PACK_SHRINK); image->show(); Gtk::Label* label = Gtk::manage( new Gtk::Label(message, GtkCompat::ALIGN_LEFT)); label->set_ellipsize(Pango::ELLIPSIZE_END); bar->pack_start(*label, Gtk::PACK_EXPAND_WIDGET); label->show(); GtkShadowType shadow_type; gtk_widget_style_get(GTK_WIDGET(m_bar_position.gobj()), "shadow-type", &shadow_type, NULL); Gtk::Frame* frame = Gtk::manage(new Gtk::Frame); m_list.push_back(0); Gobby::StatusBar::MessageHandle iter(--m_list.end()); sigc::connection timeout_conn; if(timeout) { timeout_conn = Glib::signal_timeout().connect_seconds( sigc::bind( sigc::bind_return( sigc::mem_fun( *this, &StatusBar::remove_message), false), iter), timeout); } *iter = new Message(frame, message, dialog_message, timeout_conn); ++m_visible_messages; if(dialog_message.empty()) { frame->add(*bar); } else { Gtk::EventBox *eventbox = Gtk::manage(new Gtk::EventBox); frame->add(*eventbox); eventbox->add(*bar); eventbox->signal_button_press_event().connect( sigc::bind_return(sigc::bind( sigc::mem_fun( *this, &StatusBar::on_message_clicked), iter), false)); eventbox->show(); } frame->set_shadow_type(static_cast(shadow_type)); bar->show(); pack_start(*frame, Gtk::PACK_EXPAND_WIDGET); reorder_child(*frame, 0); frame->show(); return iter; } Gobby::StatusBar::MessageHandle Gobby::StatusBar::add_info_message(const Glib::ustring& message, unsigned int timeout) { MessageHandle handle = Gobby::StatusBar::add_message(INFO, message, "", timeout); // Caller is not allowed to hold on to handles to messages that we are // going to delete anyway. if(timeout) return invalid_handle(); else return handle; } void Gobby::StatusBar::add_error_message(const Glib::ustring& brief_desc, const Glib::ustring& detailed_desc, unsigned int timeout) { MessageHandle next; for(MessageHandle iter = m_list.begin(); iter != m_list.end(); iter = next) { next = iter; ++next; if(*iter && (*iter)->is_error()) { if( (*iter)->get_simple_text() == brief_desc) { remove_message(iter); } } } Gobby::StatusBar::add_message(ERROR, brief_desc, detailed_desc, timeout); } void Gobby::StatusBar::remove_message(const MessageHandle& handle) { hide_message(handle); m_list.erase(handle); } void Gobby::StatusBar::hide_message(const MessageHandle& handle) { if(*handle != 0) { g_assert(m_visible_messages > 0); --m_visible_messages; remove(*(*handle)->widget()); delete *handle; *handle = 0; } } Gobby::StatusBar::MessageHandle Gobby::StatusBar::invalid_handle() { return m_list.end(); } void Gobby::StatusBar::on_message_clicked(GdkEventButton* button, const MessageHandle& handle) { if(button->button == 1) (*handle)->show_dialog(); remove_message(handle); } void Gobby::StatusBar::on_document_removed(SessionView& view) { if(m_current_view == &view) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); g_signal_handler_disconnect(buffer, m_mark_set_handler); g_signal_handler_disconnect(buffer, m_changed_handler); g_signal_handler_disconnect(m_current_view->get_text_view(), m_toverwrite_handler); m_current_view = NULL; } } void Gobby::StatusBar::on_document_changed(SessionView* view) { if(m_current_view) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); g_signal_handler_disconnect(buffer, m_mark_set_handler); g_signal_handler_disconnect(buffer, m_changed_handler); g_signal_handler_disconnect(m_current_view->get_text_view(), m_toverwrite_handler); } m_current_view = dynamic_cast(view); if(m_current_view) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); m_mark_set_handler = g_signal_connect_after( G_OBJECT(buffer), "mark-set", G_CALLBACK(on_mark_set_static), this); m_changed_handler = g_signal_connect_after( G_OBJECT(buffer), "changed", G_CALLBACK(on_changed_static), this); m_toverwrite_handler = g_signal_connect_after( G_OBJECT(m_current_view->get_text_view()), "notify::overwrite", G_CALLBACK(on_toggled_overwrite_static), this); } // Initial update update_pos_display(); } void Gobby::StatusBar::on_view_changed() { if(m_preferences.appearance.show_statusbar) show(); else hide(); } void Gobby::StatusBar::on_mark_set(GtkTextMark* mark) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); if(mark == gtk_text_buffer_get_insert(buffer)) update_pos_display(); } void Gobby::StatusBar::on_toggled_overwrite() { update_pos_display(); } void Gobby::StatusBar::on_changed() { update_pos_display(); } bool Gobby::StatusBar::on_window_state_event(GdkEventWindowState* event) { // In GTK+ 3 the resize grip is handled by the Window, // not the status bar #ifndef USE_GTKMM3 if (event->new_window_state & GDK_WINDOW_STATE_MAXIMIZED) m_bar_position.set_has_resize_grip(false); else m_bar_position.set_has_resize_grip(true); #endif return true; } void Gobby::StatusBar::update_pos_display() { if(m_position_context_id) m_bar_position.remove_message(m_position_context_id); if(m_current_view != NULL) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); GtkTextIter iter; // TODO: Use TextSessionView::get_cursor_position()? gtk_text_buffer_get_iter_at_mark( buffer, &iter, gtk_text_buffer_get_insert(buffer)); gint offset = gtk_text_iter_get_line_offset(&iter); unsigned int column = 0; const unsigned int tab_width = m_preferences.editor.tab_width; for(gtk_text_iter_set_line_offset(&iter, 0); gtk_text_iter_get_line_offset(&iter) < offset; gtk_text_iter_forward_char(&iter)) { if(gtk_text_iter_get_char(&iter) == '\t') column += (tab_width - column % tab_width); else ++ column; } // TODO: We might want to have a separate widget for the // OVR/INS display. m_position_context_id = m_bar_position.push( Glib::ustring::compose( _("Ln %1, Col %2\t%3"), gtk_text_iter_get_line(&iter) + 1, column + 1, gtk_text_view_get_overwrite(GTK_TEXT_VIEW(m_current_view->get_text_view())) ? _("OVR") : _("INS") ) ); } } gobby-0.5.0/code/core/foldermanager.hpp0000644000175000017500000001112112370704570014721 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FOLDERMANAGER_HPP_ #define _GOBBY_FOLDERMANAGER_HPP_ #include "core/browser.hpp" #include "core/folder.hpp" #include "core/userjoin.hpp" #include "core/documentinfostorage.hpp" #include #include namespace Gobby { // The FolderManager class manages the two folders, for text documents and // chat documents. On top of this, it also manages a relation of browser // entries to sessions and session proxies. class FolderManager: public sigc::trackable { public: typedef std::auto_ptr* UserJoinRef; typedef sigc::signal SignalDocumentAdded; typedef sigc::signal SignalDocumentRemoved; FolderManager(Browser& browser, DocumentInfoStorage& info_storage, Folder& text_folder, Folder& chat_folder); ~FolderManager(); const Folder& get_text_folder() const { return m_text_folder; } const Folder& get_chat_folder() const { return m_chat_folder; } // Add a SessionView for the given session void add_document(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, UserJoinRef userjoin); void remove_document(SessionView& view); SessionView* lookup_document(InfSession* session) const; void switch_to_document(SessionView& view); // Emitted whenever a document has been added, either for text or // for chat sessions. SignalDocumentAdded signal_document_added() const { return m_signal_document_added; } SignalDocumentRemoved signal_document_removed() const { return m_signal_document_removed; } protected: static void on_set_browser_static(InfGtkBrowserModel* model, GtkTreePath* path, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser, gpointer user_data) { static_cast(user_data)->on_set_browser( model, iter, old_browser, new_browser); } static void on_unsubscribe_session_static(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, InfRequest* request, gpointer user_data) { static_cast(user_data)-> on_unsubscribe_session(browser, iter, proxy, request); } void on_set_browser(InfGtkBrowserModel* model, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser); void on_unsubscribe_session(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, InfRequest* request); void on_text_document_added(SessionView& view); void on_chat_document_added(SessionView& view); void on_document_removed(SessionView& view); Browser& m_browser; DocumentInfoStorage& m_info_storage; Folder& m_text_folder; Folder& m_chat_folder; sigc::connection m_text_document_added_connection; sigc::connection m_chat_document_added_connection; gulong m_set_browser_handler; class BrowserInfo; typedef std::map BrowserMap; BrowserMap m_browser_map; class SessionInfo; typedef std::map SessionMap; SessionMap m_session_map; SignalDocumentAdded m_signal_document_added; SignalDocumentRemoved m_signal_document_removed; }; } #endif // _GOBBY_FOLDERMANAGER_HPP_ gobby-0.5.0/code/core/huebutton.hpp0000644000175000017500000000330412370427450014133 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_HUE_BUTTON_HPP_ #define _GOBBY_HUE_BUTTON_HPP_ #include #include #include namespace Gobby { // TODO: This should go to libinftextgtk as InfTextGtkHueButton, // inheriting directly from GtkButton to provide a clean API. class HueButton: public Gtk::ColorButton { public: HueButton(const Glib::ustring& title, Gtk::Window& parent); double get_hue() const; double get_saturation() const; double get_value() const; void set_hue(double hue); void set_saturation(double saturation); void set_value(double value); protected: virtual void on_clicked(); void on_parent_hide(); void on_dialog_response(int response_id); Glib::ustring m_title; Gtk::Window& m_parent; std::auto_ptr m_dialog; GtkWidget* m_hue_chooser; double m_saturation; double m_value; }; } #endif // _GOBBY_HUE_BUTTON_HPP_ gobby-0.5.0/code/core/folder.hpp0000644000175000017500000000674612370427450013406 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FOLDER_HPP_ #define _GOBBY_FOLDER_HPP_ #include "core/textsessionview.hpp" #include "core/chatsessionview.hpp" #include "core/preferences.hpp" #include "util/defaultaccumulator.hpp" #include "util/gtk-compat.hpp" #include #include #include namespace Gobby { class Folder : public GtkCompat::Notebook { public: // TODO chat: This should be SignalSessionAdded/Removed/Changed typedef sigc::signal SignalDocumentAdded; typedef sigc::signal SignalDocumentRemoved; typedef sigc::signal SignalDocumentChanged; typedef sigc::signal:: accumulated > SignalDocumentCloseRequest; // TODO chat: Should not require langmgr Folder(bool hide_single_tab, Preferences& preferences, GtkSourceLanguageManager* lang_manager); ~Folder(); TextSessionView& add_text_session(InfTextSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname, const std::string& info_storage_key); ChatSessionView& add_chat_session(InfChatSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname); void remove_document(SessionView& view); SessionView& get_document(unsigned int n) const; SessionView* lookup_document(InfSession* session) const; SessionView* get_current_document() const; void switch_to_document(SessionView& document); SignalDocumentAdded signal_document_added() const { return m_signal_document_added; } SignalDocumentRemoved signal_document_removed() const { return m_signal_document_removed; } SignalDocumentChanged signal_document_changed() const { return m_signal_document_changed; } SignalDocumentCloseRequest signal_document_close_request() const { return m_signal_document_close_request; } protected: virtual void on_switch_page(Gtk::Widget* page, guint page_num); virtual bool on_key_press_event(GdkEventKey* event); void on_tab_close_request(SessionView& window); const bool m_hide_single_tab; Preferences& m_preferences; GtkSourceLanguageManager* m_lang_manager; SignalDocumentAdded m_signal_document_added; SignalDocumentRemoved m_signal_document_removed; SignalDocumentChanged m_signal_document_changed; SignalDocumentCloseRequest m_signal_document_close_request; }; } #endif // _GOBBY_FOLDER_HPP_ gobby-0.5.0/code/core/credentialsgenerator.hpp0000644000175000017500000000402212370427450016320 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_CREDENTIALS_GENERATOR_HPP_ #define _GOBBY_CREDENTIALS_GENERATOR_HPP_ #include "util/asyncoperation.hpp" #include namespace Gobby { typedef AsyncOperation::Handle KeyGeneratorHandle; typedef sigc::slot< void, const KeyGeneratorHandle*, gnutls_x509_privkey_t, const GError* > SlotKeyGeneratorDone; typedef AsyncOperation::Handle CertificateGeneratorHandle; typedef sigc::slot< void, const CertificateGeneratorHandle*, gnutls_x509_crt_t, const GError* > SlotCertificateGeneratorDone; typedef AsyncOperation::Handle DHParamsGeneratorHandle; typedef sigc::slot< void, const DHParamsGeneratorHandle*, gnutls_dh_params_t, const GError* > SlotDHParamsGeneratorDone; std::auto_ptr create_key(gnutls_pk_algorithm_t algo, unsigned int bits, const SlotKeyGeneratorDone& done_slot); std::auto_ptr create_self_signed_certificate(gnutls_x509_privkey_t key, const SlotCertificateGeneratorDone& done_slot); std::auto_ptr create_dh_params(unsigned int bits, const SlotDHParamsGeneratorDone& done_slot); } #endif // _GOBBY_CREDENTIALS_GENERATOR_HPP_ gobby-0.5.0/code/core/textsessionview.cpp0000644000175000017500000005046712370707313015407 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "core/textsessionview.hpp" #include "util/i18n.hpp" #include "util/color.hpp" #include "util/gtk-compat.hpp" #include #include #include #include #include #include #include #include #include #include // TODO: Put all the preferences handling into an extra class namespace { GtkWrapMode wrap_mode_from_preferences(const Gobby::Preferences& pref) { return static_cast( static_cast(pref.view.wrap_mode)); } bool glob_matches(const gchar* const* globs, const std::string& str) { if(globs) { for(const gchar* const* glob = globs; *glob != NULL; ++ glob) { Glib::PatternSpec spec(*glob); if(spec.match(str)) return true; } } return false; } bool language_matches_title(GtkSourceLanguage* language, const gchar* title) { bool result = false; gchar** globs = gtk_source_language_get_globs(language); if(glob_matches(globs, title)) result = true; g_strfreev(globs); return result; } GtkSourceLanguage* get_language_for_title(GtkSourceLanguageManager* manager, const gchar* title) { const gchar* const* ids = gtk_source_language_manager_get_language_ids(manager); if(ids) { for(const gchar* const* id = ids; *id != NULL; ++ id) { GtkSourceLanguage* l; l = gtk_source_language_manager_get_language( manager, *id); if(l) if(language_matches_title(l, title)) return l; } } return NULL; } bool tags_priority_idle_func(Gobby::TextSessionView& view) { InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer( INF_SESSION(view.get_session()))); inf_text_gtk_buffer_ensure_author_tags_priority(buffer); // I don't know why it does not redraw automatically, perhaps // this is a bug. gtk_widget_queue_draw(GTK_WIDGET(view.get_text_view())); return false; } void on_tag_added(GtkTextTagTable* table, GtkTextTag* tag, gpointer user_data) { // We do the actual reordering in an idle handler because // the priority of the tag might not yet be set to its final // value. Glib::signal_idle().connect( sigc::bind( sigc::ptr_fun(tags_priority_idle_func), sigc::ref( *static_cast( user_data)))); } } Gobby::TextSessionView::TextSessionView(InfTextSession* session, const Glib::ustring& title, const Glib::ustring& path, const Glib::ustring& hostname, const std::string& info_storage_key, Preferences& preferences, GtkSourceLanguageManager* manager): SessionView(INF_SESSION(session), title, path, hostname), m_info_storage_key(info_storage_key), m_preferences(preferences), m_view(GTK_SOURCE_VIEW(gtk_source_view_new())) { InfBuffer* buffer = inf_session_get_buffer(INF_SESSION(session)); InfUserTable* user_table = inf_session_get_user_table(INF_SESSION(session)); m_buffer = GTK_SOURCE_BUFFER(inf_text_gtk_buffer_get_text_buffer( INF_TEXT_GTK_BUFFER(buffer))); m_infview = inf_text_gtk_view_new( inf_adopted_session_get_io(INF_ADOPTED_SESSION(session)), GTK_TEXT_VIEW(m_view), user_table); #ifdef USE_GTKMM3 g_signal_connect_after( G_OBJECT(m_view), "style-updated", G_CALLBACK(on_style_updated_static), this); #else g_signal_connect_after( G_OBJECT(m_view), "style-set", G_CALLBACK(on_style_set_static), this); #endif // This is a hack to make sure that the author tags in the textview // have lowest priority of all tags, especially lower than // GtkSourceView's FIXME tags. We do this every time a new tag is // added to the tag table since GtkSourceView seems to create tags // that it needs on the fly. GtkTextTagTable* table = gtk_text_buffer_get_tag_table( GTK_TEXT_BUFFER(m_buffer)); g_signal_connect(G_OBJECT(table), "tag-added", G_CALLBACK(on_tag_added), this); gtk_widget_set_has_tooltip(GTK_WIDGET(m_view), TRUE); g_signal_connect(m_view, "query-tooltip", G_CALLBACK(on_query_tooltip_static), this); gtk_source_buffer_set_style_scheme( m_buffer, gtk_source_style_scheme_manager_get_scheme( gtk_source_style_scheme_manager_get_default(), static_cast( preferences.appearance.scheme_id).c_str())); gtk_text_view_set_buffer(GTK_TEXT_VIEW(m_view), GTK_TEXT_BUFFER(m_buffer)); gtk_text_view_set_editable(GTK_TEXT_VIEW(m_view), FALSE); set_language(get_language_for_title(manager, title.c_str())); m_preferences.user.hue.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_user_color_changed)); m_preferences.user.alpha.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_alpha_changed)); m_preferences.user.show_remote_cursors.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_show_remote_cursors_changed)); m_preferences.user.show_remote_selections.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_show_remote_selections_changed)); m_preferences.user.show_remote_current_lines.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_show_remote_current_lines_changed)); m_preferences.user.show_remote_cursor_positions.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_show_remote_cursor_positions_changed)); m_preferences.editor.tab_width.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_tab_width_changed)); m_preferences.editor.tab_spaces.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_tab_spaces_changed)); m_preferences.editor.indentation_auto.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_auto_indent_changed)); m_preferences.editor.homeend_smart.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_homeend_smart_changed)); m_preferences.view.wrap_mode.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_wrap_mode_changed)); m_preferences.view.linenum_display.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_linenum_display_changed)); m_preferences.view.curline_highlight.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_curline_highlight_changed)); m_preferences.view.margin_display.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_margin_display_changed)); m_preferences.view.margin_pos.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_margin_pos_changed)); m_preferences.view.bracket_highlight.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_bracket_highlight_changed)); m_preferences.view.whitespace_display.signal_changed().connect( sigc::mem_fun( *this, &TextSessionView::on_whitespace_display_changed)); m_preferences.appearance.font.signal_changed().connect( sigc::mem_fun(*this, &TextSessionView::on_font_changed)); m_preferences.appearance.scheme_id.signal_changed().connect( sigc::mem_fun(*this, &TextSessionView::on_scheme_changed)); inf_text_gtk_view_set_show_remote_cursors( m_infview, m_preferences.user.show_remote_cursors ); inf_text_gtk_view_set_show_remote_selections( m_infview, m_preferences.user.show_remote_selections ); inf_text_gtk_view_set_show_remote_current_lines( m_infview, m_preferences.user.show_remote_current_lines ); gtk_source_view_set_tab_width(m_view, m_preferences.editor.tab_width); gtk_source_view_set_insert_spaces_instead_of_tabs( m_view, m_preferences.editor.tab_spaces); gtk_source_view_set_auto_indent( m_view, m_preferences.editor.indentation_auto); gtk_source_view_set_smart_home_end( m_view, m_preferences.editor.homeend_smart ? GTK_SOURCE_SMART_HOME_END_AFTER : GTK_SOURCE_SMART_HOME_END_DISABLED); gtk_text_view_set_wrap_mode( GTK_TEXT_VIEW(m_view), wrap_mode_from_preferences(m_preferences)); gtk_source_view_set_show_line_numbers( m_view, m_preferences.view.linenum_display); gtk_source_view_set_highlight_current_line( m_view, m_preferences.view.curline_highlight); gtk_source_view_set_show_right_margin( m_view, m_preferences.view.margin_display); gtk_source_view_set_right_margin_position( m_view, m_preferences.view.margin_pos); gtk_source_buffer_set_highlight_matching_brackets( m_buffer, m_preferences.view.bracket_highlight); gtk_source_view_set_draw_spaces( m_view, m_preferences.view.whitespace_display); const Pango::FontDescription& desc = m_preferences.appearance.font; gtk_widget_modify_font( GTK_WIDGET(m_view), const_cast(desc.gobj())); gtk_widget_show(GTK_WIDGET(m_view)); Gtk::ScrolledWindow* scroll = Gtk::manage(new Gtk::ScrolledWindow); scroll->set_shadow_type(Gtk::SHADOW_IN); scroll->set_policy(Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(scroll->gobj()), GTK_WIDGET(m_view)); scroll->show(); m_infviewport = inf_text_gtk_viewport_new(scroll->gobj(), user_table); inf_text_gtk_viewport_set_show_user_markers( m_infviewport, m_preferences.user.show_remote_cursor_positions ); pack_start(*scroll, Gtk::PACK_EXPAND_WIDGET); } Gobby::TextSessionView::~TextSessionView() { g_object_unref(m_infview); g_object_unref(m_infviewport); } void Gobby::TextSessionView::get_cursor_position(unsigned int& row, unsigned int& col) const { GtkTextMark* insert_mark = gtk_text_buffer_get_insert(GTK_TEXT_BUFFER(m_buffer)); GtkTextIter iter; gtk_text_buffer_get_iter_at_mark(GTK_TEXT_BUFFER(m_buffer), &iter, insert_mark); row = gtk_text_iter_get_line(&iter); col = 0; int chars = gtk_text_iter_get_line_offset(&iter); unsigned int tabs = m_preferences.editor.tab_width; // Tab characters expand to more than one column for(gtk_text_iter_set_line_offset(&iter, 0); gtk_text_iter_get_line_offset(&iter) < chars; gtk_text_iter_forward_char(&iter)) { unsigned int width = 1; if(gtk_text_iter_get_char(&iter) == '\t') { unsigned int offset = gtk_text_iter_get_line_offset(&iter); width = (tabs - offset % tabs) % tabs; if(width == 0) width = tabs; } col += width; } } void Gobby::TextSessionView::set_selection(const GtkTextIter* begin, const GtkTextIter* end) { gtk_text_buffer_select_range( gtk_text_view_get_buffer(GTK_TEXT_VIEW(m_view)), begin, end); scroll_to_cursor_position(0.1); } Glib::ustring Gobby::TextSessionView::get_selected_text() const { GtkTextIter start, end; gtk_text_buffer_get_selection_bounds( gtk_text_view_get_buffer(GTK_TEXT_VIEW(m_view)), &start, &end); Gtk::TextIter start_cpp(&start), end_cpp(&end); return start_cpp.get_slice(end_cpp); } void Gobby::TextSessionView::scroll_to_cursor_position(double within_margin) { gtk_text_view_scroll_to_mark( GTK_TEXT_VIEW(m_view), gtk_text_buffer_get_insert(gtk_text_view_get_buffer( GTK_TEXT_VIEW(m_view))), within_margin, FALSE, 0.0, 0.0); } InfUser* Gobby::TextSessionView::get_active_user() const { InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer(INF_SESSION(m_session))); return INF_USER(inf_text_gtk_buffer_get_active_user(buffer)); } void Gobby::TextSessionView::set_active_user(InfTextUser* user) { g_assert( user == NULL || inf_user_table_lookup_user_by_id( inf_session_get_user_table(INF_SESSION(m_session)), inf_user_get_id(INF_USER(user))) == INF_USER(user)); inf_text_gtk_buffer_set_active_user( INF_TEXT_GTK_BUFFER( inf_session_get_buffer(INF_SESSION(m_session))), user); inf_text_gtk_view_set_active_user(m_infview, user); inf_text_gtk_viewport_set_active_user(m_infviewport, user); // TODO: Make sure the active user has the color specified in the // preferences, and set color if not. if(user != NULL) gtk_text_view_set_editable(GTK_TEXT_VIEW(m_view), TRUE); else gtk_text_view_set_editable(GTK_TEXT_VIEW(m_view), FALSE); active_user_changed(INF_USER(user)); if(user != NULL) { m_undo_grouping.reset( new TextUndoGrouping( inf_adopted_session_get_algorithm( INF_ADOPTED_SESSION(m_session)), user, GTK_TEXT_BUFFER(m_buffer))); } else { m_undo_grouping.reset(NULL); } } GtkSourceLanguage* Gobby::TextSessionView::get_language() const { return gtk_source_buffer_get_language(m_buffer); } void Gobby::TextSessionView::set_language(GtkSourceLanguage* language) { gtk_source_buffer_set_language(m_buffer, language); m_signal_language_changed.emit(language); } void Gobby::TextSessionView::on_user_color_changed() { InfTextUser* user = INF_TEXT_USER(get_active_user()); if(user) { inf_text_session_set_user_color(get_session(), user, m_preferences.user.hue); } } void Gobby::TextSessionView::on_alpha_changed() { #ifdef USE_GTKMM3 GtkStyleContext* style = gtk_widget_get_style_context(GTK_WIDGET(m_view)); g_assert(style != NULL); // Get the view background, not the one for the side panels: gtk_style_context_save(style); gtk_style_context_add_class(style, GTK_STYLE_CLASS_VIEW); GdkRGBA rgba; gtk_style_context_get_background_color(style, GTK_STATE_FLAG_NORMAL, &rgba); gtk_style_context_restore(style); Gdk::RGBA rgbacpp(&rgba); const Gdk::Color colorcpp = GtkCompat::color_from_rgba(rgbacpp); const GdkColor& color = *colorcpp.gobj(); #else GtkStyle* style = gtk_widget_get_style(GTK_WIDGET(m_view)); g_assert(style != NULL); const GdkColor& color = style->base[GTK_STATE_NORMAL]; #endif InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer(INF_SESSION(m_session))); inf_text_gtk_buffer_set_fade( buffer, m_preferences.user.alpha, &color); } void Gobby::TextSessionView::on_show_remote_cursors_changed() { inf_text_gtk_view_set_show_remote_cursors( m_infview, m_preferences.user.show_remote_cursors ); } void Gobby::TextSessionView::on_show_remote_selections_changed() { inf_text_gtk_view_set_show_remote_selections( m_infview, m_preferences.user.show_remote_selections ); } void Gobby::TextSessionView::on_show_remote_current_lines_changed() { inf_text_gtk_view_set_show_remote_current_lines( m_infview, m_preferences.user.show_remote_current_lines ); } void Gobby::TextSessionView::on_show_remote_cursor_positions_changed() { inf_text_gtk_viewport_set_show_user_markers( m_infviewport, m_preferences.user.show_remote_cursor_positions ); } void Gobby::TextSessionView::on_tab_width_changed() { gtk_source_view_set_tab_width(m_view, m_preferences.editor.tab_width); } void Gobby::TextSessionView::on_tab_spaces_changed() { gtk_source_view_set_insert_spaces_instead_of_tabs( m_view, m_preferences.editor.tab_spaces); } void Gobby::TextSessionView::on_auto_indent_changed() { gtk_source_view_set_auto_indent( m_view, m_preferences.editor.indentation_auto); } void Gobby::TextSessionView::on_homeend_smart_changed() { gtk_source_view_set_smart_home_end( m_view, m_preferences.editor.homeend_smart ? GTK_SOURCE_SMART_HOME_END_AFTER : GTK_SOURCE_SMART_HOME_END_DISABLED); } void Gobby::TextSessionView::on_wrap_mode_changed() { gtk_text_view_set_wrap_mode( GTK_TEXT_VIEW(m_view), wrap_mode_from_preferences(m_preferences)); } void Gobby::TextSessionView::on_linenum_display_changed() { gtk_source_view_set_show_line_numbers( m_view, m_preferences.view.linenum_display); } void Gobby::TextSessionView::on_curline_highlight_changed() { gtk_source_view_set_highlight_current_line( m_view, m_preferences.view.curline_highlight); } void Gobby::TextSessionView::on_margin_display_changed() { gtk_source_view_set_show_right_margin( m_view, m_preferences.view.margin_display); } void Gobby::TextSessionView::on_margin_pos_changed() { gtk_source_view_set_right_margin_position( m_view, m_preferences.view.margin_pos); } void Gobby::TextSessionView::on_bracket_highlight_changed() { gtk_source_buffer_set_highlight_matching_brackets( m_buffer, m_preferences.view.bracket_highlight); } void Gobby::TextSessionView::on_whitespace_display_changed() { gtk_source_view_set_draw_spaces( m_view, m_preferences.view.whitespace_display); } void Gobby::TextSessionView::on_font_changed() { const Pango::FontDescription& desc = m_preferences.appearance.font; gtk_widget_modify_font( GTK_WIDGET(m_view), const_cast(desc.gobj())); } void Gobby::TextSessionView::on_scheme_changed() { gtk_source_buffer_set_style_scheme( m_buffer, gtk_source_style_scheme_manager_get_scheme( gtk_source_style_scheme_manager_get_default(), static_cast( m_preferences.appearance.scheme_id).c_str())); } bool Gobby::TextSessionView:: on_query_tooltip(int x, int y, bool keyboard_mode, const Glib::RefPtr& tooltip) { if(keyboard_mode) return false; int buffer_x, buffer_y; gtk_text_view_window_to_buffer_coords( GTK_TEXT_VIEW(m_view), GTK_TEXT_WINDOW_WIDGET, x, y, &buffer_x, &buffer_y); // Pointer is in line number display if(buffer_x < 0) return false; // Get the character at the mouse position GtkTextIter iter; int trailing; gtk_text_view_get_iter_at_position( GTK_TEXT_VIEW(m_view), &iter, &trailing, buffer_x, buffer_y); // Don't show a tooltip if the character is a newline character */ //if(gtk_text_iter_is_end(&iter)) return false; if(gtk_text_iter_ends_line(&iter)) return false; // Don't show a tooltip if we are past the end of the line GdkRectangle newline_location; GtkTextIter line_end = iter; gtk_text_iter_forward_to_line_end(&line_end); gtk_text_view_get_iter_location( GTK_TEXT_VIEW(m_view), &line_end, &newline_location); if(buffer_x >= newline_location.x && buffer_y >= newline_location.y) { return false; } InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer(INF_SESSION(m_session))); InfTextUser* author = inf_text_gtk_buffer_get_author(buffer, &iter); if(author != NULL) { tooltip->set_markup(Glib::ustring::compose( _("Text written by %1"), Glib::Markup::escape_text( inf_user_get_name(INF_USER(author))))); } else { tooltip->set_text(_("Unowned text")); } return true; } void Gobby::TextSessionView::on_style_set() { #ifdef USE_GTKMM3 GtkStyleContext* style = gtk_widget_get_style_context(GTK_WIDGET(m_view)); g_assert(style != NULL); // Get the view background, not the one for the side panels: gtk_style_context_save(style); gtk_style_context_add_class(style, GTK_STYLE_CLASS_VIEW); GdkRGBA rgba; gtk_style_context_get_background_color(style, GTK_STATE_FLAG_NORMAL, &rgba); gtk_style_context_restore(style); Gdk::RGBA rgbacpp(&rgba); const Gdk::Color colorcpp = GtkCompat::color_from_rgba(rgbacpp); const GdkColor& color = *colorcpp.gobj(); #else GtkStyle* style = gtk_widget_get_style(GTK_WIDGET(m_view)); g_assert(style != NULL); const GdkColor& color = style->base[GTK_STATE_NORMAL]; #endif double rh = color.red / 65535.0; double gs = color.green / 65535.0; double bv = color.blue / 65535.0; Gobby::rgb_to_hsv(rh, gs, bv); double my_sat = gs * 0.5 + 0.3; double my_val = (std::pow(bv + 1, 3) - 1) / 7 * 0.6 + 0.4; InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer(INF_SESSION(m_session))); inf_text_gtk_buffer_set_saturation_value(buffer, my_sat, my_val); inf_text_gtk_buffer_set_fade( buffer, m_preferences.user.alpha, &color); } gobby-0.5.0/code/main.cpp0000755000175000017500000002073112370466747012127 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "features.hpp" #include "window.hpp" #include "core/iconmanager.hpp" #include "util/config.hpp" #include "util/file.hpp" #include "util/i18n.hpp" #include #include #include #include #include #include #include #ifdef WITH_UNIQUE # include #endif #include // bindtextdomain #include #include namespace { void handle_exception(const Glib::ustring& message) { Gtk::MessageDialog dlg("Unhandled exception", false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_secondary_text(message); dlg.run(); std::cerr << "Unhandled exception: " << message << std::endl; } const char* _(const char* str) { return Gobby::_(str); } std::string gobby_localedir() { #ifdef G_OS_WIN32 gchar* root = g_win32_get_package_installation_directory_of_module( NULL); gchar* temp = g_build_filename(root, "share", "locale", NULL); g_free(root); gchar* result = g_win32_locale_filename_from_utf8(temp); g_free(temp); std::string cpp_result(result); g_free(result); return cpp_result; #else return GOBBY_LOCALEDIR; #endif } #ifdef WITH_UNIQUE int send_message_with_uris(UniqueApp* app, gint message_id, const std::vector& uris) { std::vector uri_cstrs(uris.size() + 1); for(unsigned int i = 0; i < uris.size(); ++i) uri_cstrs[i] = uris[i].c_str(); UniqueMessageData* message = unique_message_data_new(); unique_message_data_set_uris( message, const_cast(&uri_cstrs[0])); UniqueResponse response = unique_app_send_message( app, message_id, message); unique_message_data_free(message); if(response == UNIQUE_RESPONSE_OK) { return 0; } else { std::cerr << "error sending URIs to existing gobby " "instance (libunique): " << static_cast(response) << std::endl; return -1; } } int my_unique_activate(UniqueApp* app) { UniqueResponse response = unique_app_send_message(app, UNIQUE_ACTIVATE, NULL); if(response != UNIQUE_RESPONSE_OK) { std::cerr << "error activating existing gobby " "instance (libunique): " << static_cast(response) << std::endl; return -1; } else { return 0; } } int my_unique_send_file_args(UniqueApp* app, int argc, const char* const* argv) { std::vector uris(argc); for(int i = 0; i < argc; ++i) { uris[i] = Gio::File::create_for_commandline_arg( argv[i])->get_uri(); } return send_message_with_uris(app, UNIQUE_OPEN, uris); } int my_unique_send_hostname_args( UniqueApp* app, const std::vector& hostnames) { std::vector uris(hostnames); for(unsigned int i = 0; i < uris.size(); ++i) { uris[i].insert(0, "infinote://"); } return send_message_with_uris( app, Gobby::UNIQUE_GOBBY_CONNECT, uris); } int my_unique_check_other(UniqueApp* app, int argc, const char* const* argv, const std::vector& hostnames) { if(argc == 0 && hostnames.empty()) { return my_unique_activate(app); } if(argc) { if(my_unique_send_file_args(app, argc, argv) != 0) return -1; } if(!hostnames.empty()) { if (my_unique_send_hostname_args(app, hostnames)) return -1; } return 0; } #endif // WITH_UNIQUE } int main(int argc, char* argv[]) try { g_thread_init(NULL); Gio::init(); setlocale(LC_ALL, ""); bindtextdomain(GETTEXT_PACKAGE, gobby_localedir().c_str()); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); bool new_instance = false; bool display_version = false; std::vector hostnames; Glib::OptionGroup opt_group_gobby("gobby", _("Gobby options"), _("Options related to Gobby")); Glib::OptionEntry opt_version; opt_version.set_short_name('v'); opt_version.set_long_name("version"); opt_version.set_description( _("Display version information and exit")); opt_group_gobby.add_entry(opt_version, display_version); Glib::OptionEntry opt_new_instance; opt_new_instance.set_short_name('n'); opt_new_instance.set_long_name("new-instance"); opt_new_instance.set_description( _("Also start a new Gobby instance when there is one " "running already")); opt_group_gobby.add_entry(opt_new_instance, new_instance); Glib::OptionEntry opt_connect; opt_connect.set_short_name('c'); opt_connect.set_long_name("connect"); opt_connect.set_description( _("Connect to given host on startup, can be given multiple times")); opt_connect.set_arg_description(_("HOSTNAME")); opt_group_gobby.add_entry(opt_connect, hostnames); Glib::OptionContext opt_ctx; opt_ctx.set_help_enabled(true); opt_ctx.set_ignore_unknown_options(false); opt_ctx.set_main_group(opt_group_gobby); // I would rather like to have Gtk::Main on the stack, but I see // no other chance to catch exceptions from the command line option // parsing. armin. // TODO: Maybe we should parse before initializing GTK+, using // Gtk::Main::add_gtk_option_group() with open_default_display set // to false. std::auto_ptr kit; try { kit.reset(new Gtk::Main(argc, argv, opt_ctx)); } catch(Glib::Exception& e) { // Protect for non-UTF8 command lines (GTK probably already // converts to UTF-8 in case the system locale is not UTF-8, // but it can happen that input is given not in the system // locale, or simply invalid UTF-8. In that case, printing // e.what() on stdout would throw another exception, which we // want to avoid here, because otherwise we would want to // show that exception in an error dialog, but GTK+ failed // to initialize. if(e.what().validate()) std::cerr << e.what() << std::endl; else std::cerr << "Invalid input on command line" << std::endl; return EXIT_FAILURE; } if(display_version) { std::cout << "Gobby " << PACKAGE_VERSION << std::endl; return EXIT_SUCCESS; } #ifdef WITH_UNIQUE UniqueApp* app = unique_app_new_with_commands( "de._0x539.gobby", NULL, "UNIQUE_GOBBY_CONNECT", Gobby::UNIQUE_GOBBY_CONNECT, NULL); if(!new_instance && unique_app_is_running(app)) { int exit_code = my_unique_check_other( app, argc - 1, argv + 1, hostnames); g_object_unref(app); return exit_code; } #endif // WITH_UNIQUE GError* error = NULL; if(!inf_init(&error)) { std::string message = error->message; g_error_free(error); throw std::runtime_error(message); } // Read the configuration Gobby::Config config(Gobby::config_filename("config.xml")); Gobby::Preferences preferences(config); Gobby::CertificateManager cert_manager(preferences); Gobby::IconManager icon_manager; // Set default icon Gtk::Window::set_default_icon_name("gobby-0.5"); // Open a scope here, so that the main window is destructed // before we serialize the preferences, so that if the window // sets options at destruction time, they are stored correctly. { // Create window Gobby::Window wnd( argc-1, argv+1, config, preferences, icon_manager, cert_manager #ifdef WITH_UNIQUE , app #endif ); #ifdef WITH_UNIQUE g_object_unref(app); #endif wnd.show(); for(std::vector::const_iterator i = hostnames.begin(); i != hostnames.end(); ++ i) { wnd.connect_to_host(*i); } wnd.signal_hide().connect(sigc::ptr_fun(&Gtk::Main::quit) ); kit->run(); } preferences.serialize(config); //inf_deinit(); return 0; } catch(Glib::Exception& e) { handle_exception(e.what() ); } catch(std::exception& e) { handle_exception(e.what() ); } gobby-0.5.0/code/commands/0000755000175000017500000000000012376162132012335 500000000000000gobby-0.5.0/code/commands/browser-commands.hpp0000644000175000017500000000523412370704570016256 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_BROWSER_COMMANDS_HPP_ #define _GOBBY_BROWSER_COMMANDS_HPP_ #include "operations/operations.hpp" #include "core/browser.hpp" #include "core/statusbar.hpp" #include namespace Gobby { class BrowserCommands: public sigc::trackable { public: BrowserCommands(Browser& browser, FolderManager& folder_manager, StatusBar& status_bar, Operations& operations, const Preferences& preferences); ~BrowserCommands(); protected: static void on_set_browser_static(InfGtkBrowserModel* model, GtkTreePath* path, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser, gpointer user_data) { static_cast(user_data)-> on_set_browser(model, iter, old_browser, new_browser); } void on_set_browser(InfGtkBrowserModel* model, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser); void on_notify_status(InfBrowser* browser); void subscribe_chat(InfBrowser* browser); bool create_chat_document(InfBrowser* browser); void on_connect(const Glib::ustring& hostname); void on_activate(InfBrowser* browser, InfBrowserIter* iter); void on_finished(InfRequest* request, InfBrowser* browser, const InfBrowserIter* iter, const GError* error); Browser& m_browser; FolderManager& m_folder_manager; StatusBar& m_status_bar; Operations& m_operations; const Preferences& m_preferences; gulong m_set_browser_handler; class BrowserInfo; typedef std::map BrowserMap; BrowserMap m_browser_map; class RequestInfo; typedef std::map RequestMap; RequestMap m_request_map; }; } #endif // _GOBBY_BROWSER_COMMANDS_HPP_ gobby-0.5.0/code/commands/edit-commands.cpp0000644000175000017500000003603512370427450015515 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/edit-commands.hpp" #include "util/i18n.hpp" namespace { } // anonymous namespace Gobby::EditCommands::EditCommands(Gtk::Window& parent, Header& header, const Folder& folder, StatusBar& status_bar, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager): m_parent(parent), m_header(header), m_folder(folder), m_status_bar(status_bar), m_file_chooser(file_chooser), m_preferences(preferences), m_cert_manager(cert_manager), m_current_view(NULL) { m_header.action_edit_undo->signal_activate().connect( sigc::mem_fun(*this, &EditCommands::on_undo)); m_header.action_edit_redo->signal_activate().connect( sigc::mem_fun(*this, &EditCommands::on_redo)); m_header.action_edit_cut->signal_activate().connect( sigc::mem_fun(*this, &EditCommands::on_cut)); m_header.action_edit_copy->signal_activate().connect( sigc::mem_fun(*this, &EditCommands::on_copy)); m_header.action_edit_paste->signal_activate().connect( sigc::mem_fun(*this, &EditCommands::on_paste)); m_header.action_edit_find->signal_activate().connect( sigc::mem_fun(*this, &EditCommands::on_find)); m_header.action_edit_find_next->signal_activate().connect( sigc::mem_fun(*this, &EditCommands::on_find_next)); m_header.action_edit_find_prev->signal_activate().connect( sigc::mem_fun(*this, &EditCommands::on_find_prev)); m_header.action_edit_find_replace->signal_activate().connect( sigc::mem_fun(*this, &EditCommands::on_find_replace)); m_header.action_edit_goto_line->signal_activate().connect( sigc::mem_fun(*this, &EditCommands::on_goto_line)); m_header.action_edit_preferences->signal_activate().connect( sigc::mem_fun(*this, &EditCommands::on_preferences)); m_folder.signal_document_removed().connect( sigc::mem_fun(*this, &EditCommands::on_document_removed)); m_folder.signal_document_changed().connect( sigc::mem_fun(*this, &EditCommands::on_document_changed)); // Setup initial sensitivity: on_document_changed(m_folder.get_current_document()); } Gobby::EditCommands::~EditCommands() { // Disconnect handlers from current document: on_document_changed(NULL); } void Gobby::EditCommands::on_document_removed(SessionView& view) { // TODO: Isn't this emitted by Folder already? if(&view == m_current_view) on_document_changed(NULL); } void Gobby::EditCommands::on_document_changed(SessionView* view) { if(m_current_view != NULL) { InfTextSession* session = m_current_view->get_session(); InfAdoptedAlgorithm* algorithm = inf_adopted_session_get_algorithm( INF_ADOPTED_SESSION(session)); GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); if(m_synchronization_complete_handler != 0) { g_signal_handler_disconnect( G_OBJECT(session), m_synchronization_complete_handler); } else { g_signal_handler_disconnect( G_OBJECT(algorithm), m_can_undo_changed_handler); g_signal_handler_disconnect( G_OBJECT(algorithm), m_can_redo_changed_handler); } g_signal_handler_disconnect(G_OBJECT(buffer), m_mark_set_handler); g_signal_handler_disconnect(G_OBJECT(buffer), m_changed_handler); m_active_user_changed_connection.disconnect(); } m_current_view = dynamic_cast(view); if(m_current_view != NULL) { InfTextSession* session = m_current_view->get_session(); InfUser* active_user = m_current_view->get_active_user(); GtkTextBuffer* buffer = GTK_TEXT_BUFFER(m_current_view->get_text_buffer()); m_active_user_changed_connection = m_current_view->signal_active_user_changed().connect( sigc::mem_fun( *this, &EditCommands:: on_active_user_changed)); m_mark_set_handler = g_signal_connect_after( G_OBJECT(buffer), "mark-set", G_CALLBACK(&on_mark_set_static), this); // The selection might change without mark-set being emitted // when the document changes, for example when all // currently selected text is deleted. m_changed_handler = g_signal_connect_after( G_OBJECT(buffer), "changed", G_CALLBACK(&on_changed_static), this); if(inf_session_get_status(INF_SESSION(session)) == INF_SESSION_RUNNING) { // This connects to can-undo-changed and // can-redo-changed of the algorithm. Set // m_synchronization_complete_handler to zero so that // the function does not try to disconnect from it. m_synchronization_complete_handler = 0; on_sync_complete(); } else { // The InfAdoptedSession is created after // synchronization, so we wait until that finished. m_synchronization_complete_handler = g_signal_connect_after( G_OBJECT(session), "synchronization_complete", G_CALLBACK(&on_sync_complete_static), this); m_can_undo_changed_handler = 0; m_can_redo_changed_handler = 0; } // Set initial sensitivity for active user: on_active_user_changed(active_user); // Set initial sensitivity for cut/copy/paste: on_mark_set(); // Set initial sensitivity for find/replace/goto: m_header.action_edit_find->set_sensitive(true); if(m_find_dialog.get()) { on_find_text_changed(); } else { m_header.action_edit_find_next->set_sensitive(false); m_header.action_edit_find_prev->set_sensitive(false); } m_header.action_edit_find_replace->set_sensitive(true); m_header.action_edit_goto_line->set_sensitive(true); } else { m_header.action_edit_undo->set_sensitive(false); m_header.action_edit_redo->set_sensitive(false); m_header.action_edit_cut->set_sensitive(false); m_header.action_edit_copy->set_sensitive(false); m_header.action_edit_paste->set_sensitive(false); m_header.action_edit_find->set_sensitive(false); m_header.action_edit_find_next->set_sensitive(false); m_header.action_edit_find_prev->set_sensitive(false); m_header.action_edit_find_replace->set_sensitive(false); m_header.action_edit_goto_line->set_sensitive(false); } } void Gobby::EditCommands::on_sync_complete() { g_assert(m_current_view != NULL); InfTextSession* session = m_current_view->get_session(); InfAdoptedAlgorithm* algorithm = inf_adopted_session_get_algorithm( INF_ADOPTED_SESSION(session)); m_can_undo_changed_handler = g_signal_connect( G_OBJECT(algorithm), "can-undo-changed", G_CALLBACK(&on_can_undo_changed_static), this); m_can_redo_changed_handler = g_signal_connect( G_OBJECT(algorithm), "can-redo-changed", G_CALLBACK(&on_can_redo_changed_static), this); if(m_synchronization_complete_handler != 0) { g_signal_handler_disconnect( G_OBJECT(session), m_synchronization_complete_handler); m_synchronization_complete_handler = 0; } } void Gobby::EditCommands::on_active_user_changed(InfUser* active_user) { g_assert(m_current_view != NULL); if(active_user != NULL) { InfTextSession* session = m_current_view->get_session(); InfAdoptedAlgorithm* algorithm = inf_adopted_session_get_algorithm( INF_ADOPTED_SESSION(session)); GtkTextBuffer* buffer = GTK_TEXT_BUFFER( m_current_view->get_text_buffer()); m_header.action_edit_undo->set_sensitive( inf_adopted_algorithm_can_undo( algorithm, INF_ADOPTED_USER(active_user))); m_header.action_edit_redo->set_sensitive( inf_adopted_algorithm_can_redo( algorithm, INF_ADOPTED_USER(active_user))); m_header.action_edit_cut->set_sensitive( gtk_text_buffer_get_has_selection(buffer)); m_header.action_edit_paste->set_sensitive(true); } else { m_header.action_edit_undo->set_sensitive(false); m_header.action_edit_redo->set_sensitive(false); m_header.action_edit_cut->set_sensitive(false); m_header.action_edit_paste->set_sensitive(false); } } void Gobby::EditCommands::on_mark_set() { g_assert(m_current_view != NULL); GtkTextBuffer* buffer = GTK_TEXT_BUFFER(m_current_view->get_text_buffer()); m_header.action_edit_copy->set_sensitive( gtk_text_buffer_get_has_selection(buffer)); if(m_current_view->get_active_user() != NULL) { m_header.action_edit_cut->set_sensitive( gtk_text_buffer_get_has_selection(buffer)); } } void Gobby::EditCommands::on_changed() { on_mark_set(); } void Gobby::EditCommands::on_can_undo_changed(InfAdoptedUser* user, bool can_undo) { g_assert(m_current_view != NULL); if(INF_ADOPTED_USER(m_current_view->get_active_user()) == user) m_header.action_edit_undo->set_sensitive(can_undo); } void Gobby::EditCommands::on_can_redo_changed(InfAdoptedUser* user, bool can_redo) { g_assert(m_current_view != NULL); if(INF_ADOPTED_USER(m_current_view->get_active_user()) == user) m_header.action_edit_redo->set_sensitive(can_redo); } void Gobby::EditCommands::on_find_text_changed() { m_header.action_edit_find_next->set_sensitive( !m_find_dialog->get_find_text().empty()); m_header.action_edit_find_prev->set_sensitive( !m_find_dialog->get_find_text().empty()); } // TODO: The following is basically a hack to set the cursor to the position // where a Undo/Redo has happened. This can be properly fixed as soon as // libinfinity supports caret-aware requests, by generating undo-caret and // redo-caret requests. namespace { GtkTextMark* check = NULL; void recaret_i(GtkTextBuffer* buffer, GtkTextIter* location, gchar* text, gint len, gpointer user_data) { if(!check) { check = gtk_text_buffer_create_mark(buffer, NULL, location, FALSE); } else { GtkTextIter iter; gtk_text_buffer_get_iter_at_mark(buffer, &iter, check); if(gtk_text_iter_get_offset(&iter) < gtk_text_iter_get_offset(location)) gtk_text_buffer_move_mark(buffer, check, location); } } void recaret_e(GtkTextBuffer* buffer, GtkTextIter* start, GtkTextIter* end, gpointer user_data) { if(!check) { check = gtk_text_buffer_create_mark(buffer, NULL, start, FALSE); } else { GtkTextIter iter; gtk_text_buffer_get_iter_at_mark(buffer, &iter, check); if(gtk_text_iter_get_offset(&iter) < gtk_text_iter_get_offset(start)) gtk_text_buffer_move_mark(buffer, check, start); } } } void Gobby::EditCommands::on_undo() { g_assert(m_current_view != NULL); gulong i_ = g_signal_connect_after(m_current_view->get_text_buffer(), "insert-text", G_CALLBACK(recaret_i), NULL); gulong e_ = g_signal_connect_after(m_current_view->get_text_buffer(), "delete-range", G_CALLBACK(recaret_e), NULL); inf_adopted_session_undo( INF_ADOPTED_SESSION(m_current_view->get_session()), INF_ADOPTED_USER(m_current_view->get_active_user()), m_current_view->get_undo_grouping().get_undo_size() ); g_signal_handler_disconnect(m_current_view->get_text_buffer(), i_); g_signal_handler_disconnect(m_current_view->get_text_buffer(), e_); if(check) { GtkTextIter check_iter; gtk_text_buffer_get_iter_at_mark(GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), &check_iter, check); gtk_text_buffer_select_range(GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), &check_iter, &check_iter); gtk_text_buffer_delete_mark(GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), check); check = NULL; } m_current_view->scroll_to_cursor_position(0.0); } void Gobby::EditCommands::on_redo() { g_assert(m_current_view != NULL); gulong i_ = g_signal_connect_after(m_current_view->get_text_buffer(), "insert-text", G_CALLBACK(recaret_i), NULL); gulong e_ = g_signal_connect_after(m_current_view->get_text_buffer(), "delete-range", G_CALLBACK(recaret_e), NULL); inf_adopted_session_redo( INF_ADOPTED_SESSION(m_current_view->get_session()), INF_ADOPTED_USER(m_current_view->get_active_user()), m_current_view->get_undo_grouping().get_redo_size() ); g_signal_handler_disconnect(m_current_view->get_text_buffer(), i_); g_signal_handler_disconnect(m_current_view->get_text_buffer(), e_); if(check) { GtkTextIter check_iter; gtk_text_buffer_get_iter_at_mark(GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), &check_iter, check); gtk_text_buffer_select_range(GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), &check_iter, &check_iter); gtk_text_buffer_delete_mark(GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), check); check = NULL; } m_current_view->scroll_to_cursor_position(0.0); } void Gobby::EditCommands::on_cut() { g_assert(m_current_view != NULL); g_assert(m_current_view->get_active_user() != NULL); gtk_text_buffer_cut_clipboard( GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), TRUE); m_current_view->scroll_to_cursor_position(0.0); } void Gobby::EditCommands::on_copy() { g_assert(m_current_view != NULL); gtk_text_buffer_copy_clipboard( GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)); } void Gobby::EditCommands::on_paste() { g_assert(m_current_view != NULL); g_assert(m_current_view->get_active_user() != NULL); gtk_text_buffer_paste_clipboard( GTK_TEXT_BUFFER(m_current_view->get_text_buffer()), gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), NULL, TRUE); m_current_view->scroll_to_cursor_position(0.0); } void Gobby::EditCommands::on_find() { ensure_find_dialog(); m_find_dialog->set_search_only(true); m_find_dialog->present(); } void Gobby::EditCommands::on_find_next() { g_assert(m_find_dialog.get() != NULL); m_find_dialog->find_next(); } void Gobby::EditCommands::on_find_prev() { g_assert(m_find_dialog.get() != NULL); m_find_dialog->find_previous(); } void Gobby::EditCommands::on_find_replace() { ensure_find_dialog(); m_find_dialog->set_search_only(false); m_find_dialog->present(); } void Gobby::EditCommands::on_goto_line() { if(!m_goto_dialog.get()) m_goto_dialog.reset(new GotoDialog(m_parent, m_folder)); m_goto_dialog->present(); } void Gobby::EditCommands::on_preferences() { if(!m_preferences_dialog.get()) { m_preferences_dialog.reset( new PreferencesDialog(m_parent, m_file_chooser, m_preferences, m_cert_manager)); } m_preferences_dialog->present(); } void Gobby::EditCommands::ensure_find_dialog() { if(!m_find_dialog.get()) { m_find_dialog.reset(new FindDialog(m_parent, m_folder, m_status_bar)); m_find_dialog->signal_find_text_changed().connect( sigc::mem_fun( *this, &EditCommands::on_find_text_changed)); } } gobby-0.5.0/code/commands/Makefile.in0000644000175000017500000005560512376162111014332 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = code/commands DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ libgobby_commands_a_AR = $(AR) $(ARFLAGS) libgobby_commands_a_LIBADD = am_libgobby_commands_a_OBJECTS = auth-commands.$(OBJEXT) \ autosave-commands.$(OBJEXT) browser-commands.$(OBJEXT) \ browser-context-commands.$(OBJEXT) edit-commands.$(OBJEXT) \ file-commands.$(OBJEXT) folder-commands.$(OBJEXT) \ help-commands.$(OBJEXT) subscription-commands.$(OBJEXT) \ synchronization-commands.$(OBJEXT) \ user-join-commands.$(OBJEXT) view-commands.$(OBJEXT) libgobby_commands_a_OBJECTS = $(am_libgobby_commands_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/code depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgobby_commands_a_SOURCES) DIST_SOURCES = $(libgobby_commands_a_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ SUBDIRS = file-tasks noinst_LIBRARIES = libgobby-commands.a libgobby_commands_a_SOURCES = \ auth-commands.cpp \ autosave-commands.cpp \ browser-commands.cpp \ browser-context-commands.cpp \ edit-commands.cpp \ file-commands.cpp \ folder-commands.cpp \ help-commands.cpp \ subscription-commands.cpp \ synchronization-commands.cpp \ user-join-commands.cpp \ view-commands.cpp noinst_HEADERS = \ auth-commands.hpp \ autosave-commands.hpp \ browser-commands.hpp \ browser-context-commands.hpp \ edit-commands.hpp \ file-commands.hpp \ folder-commands.hpp \ help-commands.hpp \ subscription-commands.hpp \ synchronization-commands.hpp \ user-join-commands.hpp \ view-commands.hpp appicondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/gobby-0.5 AM_CPPFLAGS = $(gobby_CFLAGS) $(unique_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code all: all-recursive .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(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) --foreign code/commands/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign code/commands/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(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) libgobby-commands.a: $(libgobby_commands_a_OBJECTS) $(libgobby_commands_a_DEPENDENCIES) $(EXTRA_libgobby_commands_a_DEPENDENCIES) $(AM_V_at)-rm -f libgobby-commands.a $(AM_V_AR)$(libgobby_commands_a_AR) libgobby-commands.a $(libgobby_commands_a_OBJECTS) $(libgobby_commands_a_LIBADD) $(AM_V_at)$(RANLIB) libgobby-commands.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/auth-commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/autosave-commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/browser-commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/browser-context-commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edit-commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file-commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/folder-commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help-commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subscription-commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/synchronization-commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/user-join-commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/view-commands.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done 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: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ 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: ctags-recursive $(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 @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-recursive clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-recursive 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: gobby-0.5.0/code/commands/file-commands.hpp0000644000175000017500000000750412370427450015513 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ // TODO: Someone else should do task management #ifndef _GOBBY_FILE_COMMANDS_HPP_ #define _GOBBY_FILE_COMMANDS_HPP_ #include "operations/operations.hpp" #include "dialogs/document-location-dialog.hpp" #include "dialogs/connection-dialog.hpp" #include "core/header.hpp" #include "core/browser.hpp" #include "core/statusbar.hpp" #include "core/filechooser.hpp" #include #include namespace Gobby { class FileCommands: public sigc::trackable { public: FileCommands(Gtk::Window& parent, Header& header, Browser& browser, FolderManager& folder_manager, StatusBar& status_bar, FileChooser& file_chooser, Operations& operations, const DocumentInfoStorage& info_storage, Preferences& preferences); ~FileCommands(); class Task: public sigc::trackable { public: typedef sigc::signal SignalFinished; Task(FileCommands& file_commands); virtual ~Task() = 0; virtual void run() = 0; void finish(); Gtk::Window& get_parent(); const Folder& get_folder(); StatusBar& get_status_bar(); FileChooser& get_file_chooser(); Operations& get_operations(); const DocumentInfoStorage& get_document_info_storage(); Preferences& get_preferences(); DocumentLocationDialog& get_document_location_dialog(); SignalFinished signal_finished() const { return m_signal_finished; } protected: FileCommands& m_file_commands; SignalFinished m_signal_finished; }; void set_task(Task* task); protected: static void on_row_inserted_static(GtkTreeModel* model, GtkTreePath* path, GtkTreeIter* iter, gpointer user_data) { static_cast(user_data)->on_row_inserted(); } static void on_row_deleted_static(GtkTreeModel* model, GtkTreePath* path, gpointer user_data) { static_cast(user_data)->on_row_deleted(); } void on_document_changed(SessionView* view); void on_row_inserted(); void on_row_deleted(); void on_task_finished(); void on_new(); void on_open(); void on_open_location(); void on_save(); void on_save_as(); void on_save_all(); void on_export_html(); void on_connect(); void on_close(); void on_quit(); void on_connect_response(int response_id); void update_sensitivity(); Gtk::Window& m_parent; Header& m_header; Browser& m_browser; FolderManager& m_folder_manager; StatusBar& m_status_bar; FileChooser& m_file_chooser; Operations& m_operations; const DocumentInfoStorage& m_document_info_storage; Preferences& m_preferences; // Note: Order is important to get deinitialization right: Task may // access the location dialog in its destructor, so make sure the task // is freed before the location dialog. std::auto_ptr m_location_dialog; std::auto_ptr m_task; std::auto_ptr m_connection_dialog; gulong m_row_inserted_handler; gulong m_row_deleted_handler; }; } #endif // _GOBBY_FILE_COMMANDS_HPP_ gobby-0.5.0/code/commands/auth-commands.cpp0000644000175000017500000002454712370427447015544 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/auth-commands.hpp" #include "util/i18n.hpp" #include #include #include namespace { void show_error(const GError* error, Gobby::StatusBar& statusbar, InfXmlConnection* connection) { gchar* remote; g_object_get(connection, "remote-hostname", &remote, NULL); Glib::ustring short_message(Glib::ustring::compose( "Authentication failed for \"%1\"", remote)); g_free(remote); if(error->domain == inf_authentication_detail_error_quark()) { statusbar.add_error_message( short_message, inf_authentication_detail_strerror( InfAuthenticationDetailError( error->code))); } else { statusbar.add_error_message( short_message, error->message); } } } Gobby::AuthCommands::AuthCommands(Gtk::Window& parent, Browser& browser, StatusBar& statusbar, ConnectionManager& connection_manager, const Preferences& preferences): m_parent(parent), m_browser(browser), m_connection_manager(connection_manager), m_statusbar(statusbar), m_preferences(preferences) { GError* error = NULL; m_sasl_context = inf_sasl_context_new(&error); if(!m_sasl_context) { std::string error_message = std::string("SASL initialization error: ") + error->message; g_error_free(error); throw std::runtime_error(error_message); } inf_sasl_context_set_callback( m_sasl_context, &AuthCommands::sasl_callback_static, this); // Set SASL context for new connections: m_connection_manager.set_sasl_context(m_sasl_context, "ANONYMOUS PLAIN"); g_signal_connect( G_OBJECT(m_browser.get_store()), "set-browser", G_CALLBACK(&AuthCommands::set_browser_callback_static), this); } Gobby::AuthCommands::~AuthCommands() { m_connection_manager.set_sasl_context(NULL, NULL); inf_sasl_context_unref(m_sasl_context); for(RetryMap::iterator iter = m_retries.begin(); iter != m_retries.end(); ++iter) { g_signal_handler_disconnect(iter->first, iter->second.handle); } } void Gobby::AuthCommands::set_sasl_error(InfXmppConnection* connection, const gchar* message) { GError* error = g_error_new_literal( inf_authentication_detail_error_quark(), INF_AUTHENTICATION_DETAIL_ERROR_AUTHENTICATION_FAILED, message ); inf_xmpp_connection_set_sasl_error(connection, error); g_error_free(error); } void Gobby::AuthCommands::sasl_callback(InfSaslContextSession* session, InfXmppConnection* xmpp, Gsasl_property prop) { const Glib::ustring username = m_preferences.user.name; const std::string correct_password = m_preferences.user.password; const char* password; switch(prop) { case GSASL_ANONYMOUS_TOKEN: inf_sasl_context_session_set_property( session, GSASL_ANONYMOUS_TOKEN, username.c_str()); inf_sasl_context_session_continue(session, GSASL_OK); break; case GSASL_AUTHID: inf_sasl_context_session_set_property( session, GSASL_AUTHID, username.c_str()); inf_sasl_context_session_continue(session, GSASL_OK); break; case GSASL_PASSWORD: { RetryMap::iterator i = m_retries.find(xmpp); if(i == m_retries.end()) i = insert_retry_info(xmpp); RetryInfo& info(i->second); if(!info.last_password.empty()) { inf_sasl_context_session_set_property( session, GSASL_PASSWORD, info.last_password.c_str()); inf_sasl_context_session_continue(session, GSASL_OK); } else { // Query user for password g_assert(info.password_dialog == NULL); gchar* remote_id; g_object_get(G_OBJECT(xmpp), "remote-hostname", &remote_id, NULL); Glib::ustring remote_id_(remote_id); g_free(remote_id); info.password_dialog = new PasswordDialog( m_parent, remote_id_, info.retries); info.password_dialog->add_button( Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); info.password_dialog->add_button( Gtk::Stock::OK, Gtk::RESPONSE_ACCEPT); Gtk::Dialog& dialog = *info.password_dialog; dialog.signal_response().connect(sigc::bind( sigc::mem_fun( *this, &AuthCommands::on_response), session, xmpp)); info.password_dialog->present(); } } break; case GSASL_VALIDATE_ANONYMOUS: if(m_preferences.user.require_password) { inf_sasl_context_session_continue( session, GSASL_AUTHENTICATION_ERROR ); set_sasl_error(xmpp, _("Password required")); } else { inf_sasl_context_session_continue(session, GSASL_OK); } break; case GSASL_VALIDATE_SIMPLE: password = inf_sasl_context_session_get_property( session, GSASL_PASSWORD); if(strcmp(password, correct_password.c_str()) != 0) { inf_sasl_context_session_continue( session, GSASL_AUTHENTICATION_ERROR ); set_sasl_error(xmpp, _("Incorrect password")); } else { inf_sasl_context_session_continue(session, GSASL_OK); } break; default: inf_sasl_context_session_continue(session, GSASL_NO_CALLBACK); break; } } void Gobby::AuthCommands::on_response(int response_id, InfSaslContextSession* session, InfXmppConnection* xmpp) { RetryMap::iterator i = m_retries.find(xmpp); g_assert(i != m_retries.end()); RetryInfo& info(i->second); if(response_id == Gtk::RESPONSE_ACCEPT) info.last_password = info.password_dialog->get_password(); else info.last_password = ""; delete info.password_dialog; info.password_dialog = NULL; ++info.retries; if(info.last_password.empty()) { inf_sasl_context_session_continue(session, GSASL_NO_PASSWORD); } else { inf_sasl_context_session_set_property( session, GSASL_PASSWORD, info.last_password.c_str()); inf_sasl_context_session_continue(session, GSASL_OK); } } void Gobby::AuthCommands::set_browser_callback(InfBrowser* old_browser, InfBrowser* new_browser) { // TODO: Disconnect from the signal on destruction? if(new_browser != NULL && INFC_IS_BROWSER(new_browser)) { g_signal_connect( G_OBJECT(new_browser), "error", G_CALLBACK(browser_error_callback_static), this); } } void Gobby::AuthCommands::browser_error_callback(InfcBrowser* browser, GError* error) { // The Browser already displays errors inline, but we want // auth-related error messages to show up in the status bar. InfXmlConnection* connection = infc_browser_get_connection(browser); g_assert(INF_IS_XMPP_CONNECTION(connection)); InfXmppConnection* xmpp = INF_XMPP_CONNECTION(connection); RetryMap::iterator iter = m_retries.find(xmpp); if(iter == m_retries.end()) iter = insert_retry_info(xmpp); Glib::ustring& last_password(iter->second.last_password); Glib::ustring old_password; old_password.swap(last_password); if(error->domain == g_quark_from_static_string("INF_XMPP_CONNECTION_AUTH_ERROR")) { // Authentication failed for some reason, maybe because the // server aborted authentication. If we were querying a // password then close the dialog now. delete iter->second.password_dialog; iter->second.password_dialog = NULL; const GError* sasl_error = inf_xmpp_connection_get_sasl_error(xmpp); if(sasl_error != NULL && sasl_error->domain == inf_authentication_detail_error_quark()) { handle_error_detail(xmpp, sasl_error, old_password, last_password); } else if(sasl_error != NULL) { show_error(sasl_error, m_statusbar, connection); } else { show_error(error, m_statusbar, connection); } } else if(error->domain == inf_gsasl_error_quark()) { show_error(error, m_statusbar, connection); } } void Gobby::AuthCommands::handle_error_detail(InfXmppConnection* xmpp, const GError* detail_error, Glib::ustring& old_password, Glib::ustring& last_password) { GError* error = NULL; switch(detail_error->code) { case INF_AUTHENTICATION_DETAIL_ERROR_AUTHENTICATION_FAILED: inf_xmpp_connection_retry_sasl_authentication(xmpp, &error); break; case INF_AUTHENTICATION_DETAIL_ERROR_TRY_AGAIN: old_password.swap(last_password); inf_xmpp_connection_retry_sasl_authentication(xmpp, &error); break; default: show_error(detail_error, m_statusbar, INF_XML_CONNECTION(xmpp)); break; } if(error) { show_error(error, m_statusbar, INF_XML_CONNECTION(xmpp)); g_error_free(error); } } Gobby::AuthCommands::RetryMap::iterator Gobby::AuthCommands::insert_retry_info(InfXmppConnection* xmpp) { RetryMap::iterator iter = m_retries.insert( std::make_pair(xmpp, RetryInfo())).first; iter->second.retries = 0; iter->second.handle = g_signal_connect( G_OBJECT(xmpp), "notify::status", G_CALLBACK(on_notify_status_static), this); iter->second.password_dialog = NULL; return iter; } void Gobby::AuthCommands::on_notify_status(InfXmppConnection* connection) { InfXmlConnectionStatus status; g_object_get(G_OBJECT(connection), "status", &status, NULL); if(status != INF_XML_CONNECTION_OPENING) { RetryMap::iterator iter = m_retries.find(connection); g_signal_handler_disconnect(connection, iter->second.handle); delete iter->second.password_dialog; m_retries.erase(iter); } } gobby-0.5.0/code/commands/subscription-commands.hpp0000644000175000017500000000344312370427450017316 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_SUBSCRIPTION_COMMANDS_HPP_ #define _GOBBY_SUBSCRIPTION_COMMANDS_HPP_ #include "core/folder.hpp" namespace Gobby { // This class does not do much anymore. All it does is showing an error // message when a session loses the connection to its publisher, and resets // the active user to NULL. // TODO: The name of this class is a bit misleading now. class SubscriptionCommands: public sigc::trackable { public: SubscriptionCommands(const Folder& text_folder, const Folder& chat_folder); ~SubscriptionCommands(); protected: void on_text_document_added(SessionView& view); void on_chat_document_added(SessionView& view); void on_document_removed(SessionView& view); void on_notify_subscription_group(InfSession* session); const Folder& m_text_folder; const Folder& m_chat_folder; class SessionInfo; typedef std::map SessionMap; SessionMap m_session_map; }; } #endif // _GOBBY_SUBSCRIPTION_COMMANDS_HPP_ gobby-0.5.0/code/commands/browser-context-commands.cpp0000644000175000017500000004601612374261254017737 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/browser-context-commands.hpp" #include "operations/operation-open-multiple.hpp" #include "util/file.hpp" #include "util/i18n.hpp" #include #include #include #include #include #include #include #include // TODO: Use file tasks for the commands, once we made them public namespace { std::string make_safe_filename(const Glib::ustring& cn) { Glib::ustring output(cn); for(Glib::ustring::iterator iter = output.begin(); iter != output.end(); ) { if(Glib::Unicode::isspace(*iter) || *iter == '/' || *iter == '\\' || *iter == ':' || *iter == '?') { iter = output.erase(iter); } else { ++iter; } } return output; } bool check_file(const std::string& filename) { return Glib::file_test(filename, Glib::FILE_TEST_EXISTS); } std::string make_certificate_filename(const Glib::ustring& cn, const Glib::ustring& hostname) { const std::string basename = make_safe_filename(hostname) + "-" + make_safe_filename(cn); const std::string prefname = Gobby::config_filename(basename + ".pem"); if(!check_file(prefname)) return prefname; for(unsigned int i = 2; i < 10000; ++i) { const std::string altname = Gobby::config_filename( basename + "-" + Glib::ustring::compose( "%1", i) + ".pem"); if(!check_file(altname)) return altname; } throw std::runtime_error( Gobby::_("Could not find a location " "where to store the certificate")); } } Gobby::BrowserContextCommands::BrowserContextCommands( Gtk::Window& parent, InfIo* io, Browser& browser, FileChooser& chooser, Operations& operations, const CertificateManager& cert_manager, Preferences& prefs) : m_parent(parent), m_io(io), m_browser(browser), m_file_chooser(chooser), m_operations(operations), m_cert_manager(cert_manager), m_preferences(prefs), m_popup_menu(NULL) { g_object_ref(io); m_populate_popup_handler = g_signal_connect( m_browser.get_view(), "populate-popup", G_CALLBACK(on_populate_popup_static), this); } Gobby::BrowserContextCommands::~BrowserContextCommands() { g_signal_handler_disconnect(m_browser.get_view(), m_populate_popup_handler); g_object_unref(m_io); } void Gobby::BrowserContextCommands::on_menu_node_removed() { g_assert(m_popup_menu != NULL); // This calls deactivate, causing the watch to be removed. m_popup_menu->popdown(); } void Gobby::BrowserContextCommands::on_menu_deactivate() { m_watch.reset(NULL); } void Gobby::BrowserContextCommands::on_populate_popup(Gtk::Menu* menu) { // TODO: Can this happen? Should we close the old popup here? g_assert(m_popup_menu == NULL); // Cancel previous attempts m_watch.reset(NULL); m_dialog.reset(NULL); InfBrowser* browser; InfBrowserIter iter; if(!m_browser.get_selected_browser(&browser)) return; if(!m_browser.get_selected_iter(browser, &iter)) { InfBrowserStatus browser_status; g_object_get(G_OBJECT(browser), "status", &browser_status, NULL); if(browser_status == INF_BROWSER_CLOSED) { Gtk::ImageMenuItem *remove_item = Gtk::manage( new Gtk::ImageMenuItem(_("_Remove"), true)); remove_item->set_image(*Gtk::manage(new Gtk::Image( Gtk::Stock::CLOSE, Gtk::ICON_SIZE_MENU))); remove_item->signal_activate().connect(sigc::bind( sigc::mem_fun(*this, &BrowserContextCommands::on_remove), browser)); remove_item->show(); menu->append(*remove_item); } return; } InfBrowserIter dummy_iter = iter; bool is_subdirectory = inf_browser_is_subdirectory(browser, &iter); bool is_toplevel = !inf_browser_get_parent(browser, &dummy_iter); // Watch the node, and close the popup menu when the node // it refers to is removed. m_watch.reset(new NodeWatch(browser, &iter)); m_watch->signal_node_removed().connect(sigc::mem_fun( *this, &BrowserContextCommands::on_menu_node_removed)); menu->signal_deactivate().connect(sigc::mem_fun( *this, &BrowserContextCommands::on_menu_deactivate)); bool have_toplevel_entries = false; // Add "Disconnect" menu option if the connection // item has been clicked at if(is_toplevel && INFC_IS_BROWSER(browser)) { Gtk::ImageMenuItem* disconnect_item = Gtk::manage( new Gtk::ImageMenuItem( _("_Disconnect from Server"), true)); disconnect_item->set_image(*Gtk::manage(new Gtk::Image( Gtk::Stock::DISCONNECT, Gtk::ICON_SIZE_MENU))); disconnect_item->signal_activate().connect(sigc::bind( sigc::mem_fun(*this, &BrowserContextCommands::on_disconnect), INFC_BROWSER(browser))); disconnect_item->show(); menu->append(*disconnect_item); have_toplevel_entries = true; } // Add create account option if the connection item has been clicked at // Only offer this for clients at the moment, since local servers do // not support this. if(is_toplevel && INFC_IS_BROWSER(browser)) { const InfAclAccount* account = inf_browser_get_acl_local_account(browser); const InfAclAccountId acc_id = (account != NULL) ? account->id : 0; InfAclMask mask; inf_acl_mask_set1(&mask, INF_ACL_CAN_CREATE_ACCOUNT); inf_browser_check_acl(browser, &iter, acc_id, &mask, &mask); if(inf_acl_mask_has(&mask, INF_ACL_CAN_CREATE_ACCOUNT)) { Gtk::Image* image = Gtk::manage(new Gtk::Image); image->set_from_icon_name("application-certificate", Gtk::ICON_SIZE_MENU); Gtk::ImageMenuItem* item = Gtk::manage(new Gtk::ImageMenuItem( _("Create _Account..."), true)); item->set_image(*image); item->signal_activate().connect(sigc::bind( sigc::mem_fun( *this, &BrowserContextCommands:: on_create_account), browser)); item->show(); menu->append(*item); have_toplevel_entries = true; } } // Separator, if we have entries dedicated to the browser itself if(have_toplevel_entries) { Gtk::SeparatorMenuItem* sep_item = Gtk::manage(new Gtk::SeparatorMenuItem); sep_item->show(); menu->append(*sep_item); } // Create Document Gtk::ImageMenuItem* new_document_item = Gtk::manage( new Gtk::ImageMenuItem(_("Create Do_cument..."), true)); new_document_item->set_image(*Gtk::manage(new Gtk::Image( Gtk::Stock::NEW, Gtk::ICON_SIZE_MENU))); new_document_item->signal_activate().connect(sigc::bind( sigc::mem_fun(*this, &BrowserContextCommands::on_new), browser, iter, false)); new_document_item->set_sensitive(is_subdirectory); new_document_item->show(); menu->append(*new_document_item); // Create Directory // Check whether we have the folder-new icon, fall back to // Stock::DIRECTORY otherwise Glib::RefPtr screen = menu->get_screen(); Glib::RefPtr icon_theme( Gtk::IconTheme::get_for_screen(screen)); Gtk::Image* new_directory_image = Gtk::manage(new Gtk::Image); if(icon_theme->lookup_icon("folder-new", Gtk::ICON_SIZE_MENU, Gtk::ICON_LOOKUP_USE_BUILTIN)) { new_directory_image->set_from_icon_name( "folder-new", Gtk::ICON_SIZE_MENU); } else { new_directory_image->set( Gtk::Stock::DIRECTORY, Gtk::ICON_SIZE_MENU); } Gtk::ImageMenuItem* new_directory_item = Gtk::manage( new Gtk::ImageMenuItem(_("Create Di_rectory..."), true)); new_directory_item->set_image(*new_directory_image); new_directory_item->signal_activate().connect(sigc::bind( sigc::mem_fun(*this, &BrowserContextCommands::on_new), browser, iter, true)); new_directory_item->set_sensitive(is_subdirectory); new_directory_item->show(); menu->append(*new_directory_item); // Open Document Gtk::ImageMenuItem* open_document_item = Gtk::manage( new Gtk::ImageMenuItem(_("_Open Document..."), true)); open_document_item->set_image(*Gtk::manage(new Gtk::Image( Gtk::Stock::OPEN, Gtk::ICON_SIZE_MENU))); open_document_item->signal_activate().connect(sigc::bind( sigc::mem_fun(*this, &BrowserContextCommands::on_open), browser, iter)); open_document_item->set_sensitive(is_subdirectory); open_document_item->show(); menu->append(*open_document_item); // Separator Gtk::SeparatorMenuItem* sep_item = Gtk::manage(new Gtk::SeparatorMenuItem); sep_item->show(); menu->append(*sep_item); // Permissions Gtk::ImageMenuItem* permissions_item = Gtk::manage( new Gtk::ImageMenuItem(_("_Permissions..."), true)); permissions_item->set_image(*Gtk::manage(new Gtk::Image( Gtk::Stock::PROPERTIES, Gtk::ICON_SIZE_MENU))); permissions_item->signal_activate().connect(sigc::bind( sigc::mem_fun(*this, &BrowserContextCommands::on_permissions), browser, iter)); permissions_item->show(); menu->append(*permissions_item); // Delete Gtk::ImageMenuItem* delete_item = Gtk::manage( new Gtk::ImageMenuItem(_("D_elete"), true)); delete_item->set_image(*Gtk::manage(new Gtk::Image( Gtk::Stock::DELETE, Gtk::ICON_SIZE_MENU))); delete_item->signal_activate().connect(sigc::bind( sigc::mem_fun(*this, &BrowserContextCommands::on_delete), browser, iter)); delete_item->set_sensitive(!is_toplevel); delete_item->show(); menu->append(*delete_item); m_popup_menu = menu; menu->signal_selection_done().connect( sigc::mem_fun( *this, &BrowserContextCommands::on_popdown)); } void Gobby::BrowserContextCommands::on_popdown() { m_popup_menu = NULL; } void Gobby::BrowserContextCommands::on_disconnect(InfcBrowser* browser) { InfXmlConnection* connection = infc_browser_get_connection(browser); InfXmlConnectionStatus status; g_object_get(G_OBJECT(connection), "status", &status, NULL); if(status != INF_XML_CONNECTION_CLOSED && status != INF_XML_CONNECTION_CLOSING) { inf_xml_connection_close(connection); } } void Gobby::BrowserContextCommands::on_create_account(InfBrowser* browser) { InfGtkAccountCreationDialog* dlg = inf_gtk_account_creation_dialog_new( m_parent.gobj(), static_cast(0), m_io, browser); std::auto_ptr account_creation_dialog( Glib::wrap(GTK_DIALOG(dlg))); account_creation_dialog->add_button( Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE); account_creation_dialog->signal_response().connect( sigc::mem_fun(*this, &BrowserContextCommands::on_create_account_response)); g_signal_connect( G_OBJECT(account_creation_dialog->gobj()), "account-created", G_CALLBACK(on_account_created_static), this); m_dialog = account_creation_dialog; m_dialog->present(); } void Gobby::BrowserContextCommands::on_remove(InfBrowser* browser) { InfBrowserStatus status; g_object_get(G_OBJECT(browser), "status", &status, NULL); g_assert(status == INF_BROWSER_CLOSED); m_browser.remove_browser(browser); } void Gobby::BrowserContextCommands::on_new(InfBrowser* browser, InfBrowserIter iter, bool directory) { m_watch.reset(new NodeWatch(browser, &iter)); m_watch->signal_node_removed().connect(sigc::mem_fun( *this, &BrowserContextCommands::on_dialog_node_removed)); std::auto_ptr entry_dialog( new EntryDialog( m_parent, directory ? _("Choose a name for the directory") : _("Choose a name for the document"), directory ? _("_Directory Name:") : _("_Document Name:"))); entry_dialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); entry_dialog->add_button(_("C_reate"), Gtk::RESPONSE_ACCEPT) ->set_image(*Gtk::manage(new Gtk::Image( Gtk::Stock::NEW, Gtk::ICON_SIZE_BUTTON))); entry_dialog->set_text(directory ? _("New Directory") : _("New Document")); entry_dialog->signal_response().connect(sigc::bind( sigc::mem_fun(*this, &BrowserContextCommands::on_new_response), browser, iter, directory)); m_dialog = entry_dialog; m_dialog->present(); } void Gobby::BrowserContextCommands::on_open(InfBrowser* browser, InfBrowserIter iter) { m_watch.reset(new NodeWatch(browser, &iter)); m_watch->signal_node_removed().connect(sigc::mem_fun( *this, &BrowserContextCommands::on_dialog_node_removed)); std::auto_ptr file_dialog( new FileChooser::Dialog( m_file_chooser, m_parent, _("Choose a text file to open"), Gtk::FILE_CHOOSER_ACTION_OPEN)); file_dialog->signal_response().connect(sigc::bind( sigc::mem_fun(*this, &BrowserContextCommands::on_open_response), browser, iter)); file_dialog->set_select_multiple(true); m_dialog = file_dialog; m_dialog->present(); } void Gobby::BrowserContextCommands::on_permissions(InfBrowser* browser, InfBrowserIter iter) { m_watch.reset(new NodeWatch(browser, &iter)); m_watch->signal_node_removed().connect(sigc::mem_fun( *this, &BrowserContextCommands::on_dialog_node_removed)); InfGtkPermissionsDialog* dlg = inf_gtk_permissions_dialog_new( m_parent.gobj(), static_cast(0), browser, &iter); std::auto_ptr permissions_dialog( Glib::wrap(GTK_DIALOG(dlg))); permissions_dialog->add_button(Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE); permissions_dialog->signal_response().connect( sigc::mem_fun(*this, &BrowserContextCommands::on_permissions_response)); m_dialog = permissions_dialog; m_dialog->present(); } void Gobby::BrowserContextCommands::on_delete(InfBrowser* browser, InfBrowserIter iter) { m_operations.delete_node(browser, &iter); } void Gobby::BrowserContextCommands::on_dialog_node_removed() { m_watch.reset(NULL); m_dialog.reset(NULL); } void Gobby::BrowserContextCommands::on_create_account_response(int response_id) { m_watch.reset(NULL); m_dialog.reset(NULL); } void Gobby::BrowserContextCommands::on_account_created( gnutls_x509_privkey_t key, InfCertificateChain* certificate, const InfAclAccount* account) { InfBrowser* browser; g_object_get(G_OBJECT(m_dialog->gobj()), "browser", &browser, NULL); const InfAclAccount* own_account = inf_browser_get_acl_local_account(browser); const InfAclAccountId default_id = inf_acl_account_id_from_string("default"); const bool is_default_account = (own_account->id == default_id); g_object_unref(browser); gnutls_x509_crt_t cert = inf_certificate_chain_get_own_certificate(certificate); gchar* name = inf_cert_util_get_dn_by_oid( cert, GNUTLS_OID_X520_COMMON_NAME, 0); const std::string cn = name; g_free(name); std::string host; if(INFC_IS_BROWSER(browser)) { InfXmlConnection* xml = infc_browser_get_connection(INFC_BROWSER(browser)); if(INF_IS_XMPP_CONNECTION(xml)) { gchar* hostname; g_object_get(G_OBJECT(xml), "remote-hostname", &hostname, NULL); host = hostname; g_free(hostname); } } if(host.empty()) host = "local"; gnutls_x509_crt_t* certs = inf_certificate_chain_get_raw(certificate); const unsigned int n_certs = inf_certificate_chain_get_n_certificates(certificate); std::auto_ptr dlg; try { const std::string filename = make_certificate_filename(cn, host); GError* error = NULL; inf_cert_util_write_certificate_with_key( key, certs, n_certs, filename.c_str(), &error); if(error != NULL) { const std::string message = error->message; g_error_free(error); throw std::runtime_error(message); } if(is_default_account && (m_cert_manager.get_private_key() == NULL || m_cert_manager.get_certificates() == NULL)) { m_preferences.security.key_file = filename; m_preferences.security.certificate_file = filename; dlg.reset(new Gtk::MessageDialog( m_parent, _("Account successfully created"), false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_CLOSE)); dlg->set_secondary_text( _("When re-connecting to the server, the " "new account will be used.")); } else { // TODO: Gobby should support multiple certificates dlg.reset(new Gtk::MessageDialog( m_parent, _("Account successfully created"), false, Gtk::MESSAGE_INFO, Gtk::BUTTONS_CLOSE)); dlg->set_secondary_text(Glib::ustring::compose( _("The certificate has been stored at %1.\n\n" "To login to this account, set the " "certificate in Gobby's preferences " "and re-connect to the server."), filename)); } } catch(const std::exception& ex) { // This is actually a bit unfortunate, because the // account was actually created and we have a valid // certificate for it, but we cannot keep it... dlg.reset(new Gtk::MessageDialog( m_parent, _("Failed to create account"), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_CLOSE)); dlg->set_secondary_text(Glib::ustring::compose( _("Could not save the certificate for the " "account: %1"), ex.what())); } m_dialog = dlg; m_dialog->signal_response().connect( sigc::mem_fun( *this, &BrowserContextCommands:: on_account_created_response)); m_dialog->present(); } void Gobby::BrowserContextCommands::on_account_created_response( int response_id) { m_dialog.reset(NULL); } void Gobby::BrowserContextCommands::on_new_response(int response_id, InfBrowser* browser, InfBrowserIter iter, bool directory) { EntryDialog* entry_dialog = static_cast(m_dialog.get()); if(response_id == Gtk::RESPONSE_ACCEPT) { if(directory) { // TODO: Select the newly created directory in tree m_operations.create_directory( browser, &iter, entry_dialog->get_text()); } else { m_operations.create_document( browser, &iter, entry_dialog->get_text()); } } m_watch.reset(NULL); m_dialog.reset(NULL); } void Gobby::BrowserContextCommands::on_open_response(int response_id, InfBrowser* browser, InfBrowserIter iter) { FileChooser::Dialog* dialog = static_cast(m_dialog.get()); if(response_id == Gtk::RESPONSE_ACCEPT) { Glib::SListHandle uris = dialog->get_uris(); OperationOpenMultiple::uri_list uri_list( uris.begin(), uris.end()); m_operations.create_documents( browser, &iter, m_preferences, uri_list); } m_watch.reset(NULL); m_dialog.reset(NULL); } void Gobby::BrowserContextCommands::on_permissions_response(int response_id) { m_watch.reset(NULL); m_dialog.reset(NULL); } gobby-0.5.0/code/commands/synchronization-commands.hpp0000644000175000017500000000332512370427450020032 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_SYNCHRONIZATION_COMMANDS_HPP_ #define _GOBBY_SYNCHRONIZATION_COMMANDS_HPP_ #include #include "core/folder.hpp" namespace Gobby { class SynchronizationCommands: public sigc::trackable { public: SynchronizationCommands(const Folder& text_folder, const Folder& chat_folder); ~SynchronizationCommands(); protected: class SyncInfo; void on_document_added(SessionView& view); void on_document_removed(SessionView& view); void on_synchronization_failed(InfSession* session, InfXmlConnection* connection, const GError* error); void on_synchronization_complete(InfSession* session, InfXmlConnection* connection); typedef std::map SyncMap; SyncMap m_sync_map; }; } #endif // _GOBBY_SYNCHRONIZATION_COMMANDS_HPP_ gobby-0.5.0/code/commands/user-join-commands.hpp0000644000175000017500000000425312370704570016506 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_USER_JOIN_COMMANDS_HPP_ #define _GOBBY_USER_JOIN_COMMANDS_HPP_ #include "core/foldermanager.hpp" #include "core/preferences.hpp" #include "core/userjoin.hpp" #include namespace Gobby { class UserJoinCommands: public sigc::trackable { public: UserJoinCommands(FolderManager& folder_manager, const Preferences& preferences); ~UserJoinCommands(); protected: void on_document_added(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, Folder& folder, SessionView& view, FolderManager::UserJoinRef j); void on_document_removed(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, Folder& folder, SessionView& view); void on_user_join_finished(InfSessionProxy* proxy, Folder& folder, SessionView& view, InfUser* user, const GError* error); const Preferences& m_preferences; class UserJoinInfo; typedef std::map UserJoinMap; UserJoinMap m_user_join_map; }; } #endif // _GOBBY_USER_JOIN_COMMANDS_HPP_ gobby-0.5.0/code/commands/help-commands.cpp0000644000175000017500000001210712370427450015512 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/help-commands.hpp" #include "util/i18n.hpp" #include "util/gtk-compat.hpp" #include #include namespace { void url_hook(Gtk::AboutDialog& dialog, const Glib::ustring& link) { // TODO: Set correct timestamp here, using // GdkAppLaunchContext? g_app_info_launch_default_for_uri(link.c_str(), NULL, NULL); } void email_hook(Gtk::AboutDialog& dialog, const Glib::ustring& link) { // TODO: Set correct timestamp here, using // GdkAppLaunchContext? g_app_info_launch_default_for_uri( ("mailto:" + link).c_str(), NULL, NULL); } } Gobby::HelpCommands::HelpCommands(Gtk::Window& parent, Header& header, const IconManager& icon_manager): m_parent(parent), m_header(header), m_icon_manager(icon_manager) { #ifndef USE_GTKMM3 Gtk::AboutDialog::set_url_hook(sigc::ptr_fun(url_hook)); Gtk::AboutDialog::set_email_hook(sigc::ptr_fun(email_hook)); #endif header.action_help_contents->signal_activate().connect( sigc::mem_fun(*this, &HelpCommands::on_contents)); header.action_help_about->signal_activate().connect( sigc::mem_fun(*this, &HelpCommands::on_about)); } void Gobby::HelpCommands::on_contents() { GError* error = NULL; gtk_show_uri(m_parent.get_screen()->gobj(), "ghelp:gobby", GDK_CURRENT_TIME, &error); if(error == NULL) return; // Help browser could not be invoked, show an error message to the user. Gtk::MessageDialog dlg(m_parent, _("There was an error displaying help."), false, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true); dlg.set_secondary_text(error->message); dlg.run(); g_error_free(error); } void Gobby::HelpCommands::on_about() { if(m_about_dialog.get() == NULL) { m_about_dialog.reset(new Gtk::AboutDialog); m_about_dialog->set_transient_for(m_parent); std::vector artists; artists.push_back("Benjamin Herr "); artists.push_back("Thomas Glatt "); std::vector authors; authors.push_back("Armin Burgmeier "); authors.push_back("Philipp Kern "); authors.push_back(""); authors.push_back(_("Contributors:")); authors.push_back("\tBenjamin Herr "); authors.push_back("\tBen Levitt "); authors.push_back("\tGabríel A. Pétursson "); std::vector translators; translators.push_back(_("British English:")); translators.push_back("\tGabríel A. Pétursson "); translators.push_back(_("German:")); translators.push_back("\tMichael Frey "); Glib::ustring transl = ""; for(std::vector::iterator i = translators.begin(); i != translators.end(); ++i) { if(i != translators.begin()) transl += "\n"; transl += *i; } m_about_dialog->set_artists(artists); m_about_dialog->set_authors(authors); m_about_dialog->set_translator_credits(transl); m_about_dialog->set_copyright( "Copyright © 2008-2014 Armin Burgmeier"); m_about_dialog->set_license(_( "Permission to use, copy, modify, and/or distribute " "this software for any urpose with or without fee is " "hereby granted, provided that the above copyright " "notice and this permission notice appear in all " "copies.\n\n" "THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR " "DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS " "SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF " "MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE " "AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, " "OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER " "RESULTING FROM LOSS OF USE, DATA OR PROFITS, " "WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR " "OTHER TORTIOUS ACTION, ARISING OUT OF OR IN " "CONNECTION WITH THE USE OR PERFORMANCE OF THIS " "SOFTWARE.")); m_about_dialog->set_logo_icon_name("gobby-0.5"); m_about_dialog->set_program_name("Gobby"); m_about_dialog->set_version(PACKAGE_VERSION); m_about_dialog->set_website("http://gobby.0x539.de/"); m_about_dialog->set_wrap_license(true); m_about_dialog->signal_response().connect( sigc::mem_fun( *this, &HelpCommands::on_about_response)); } m_about_dialog->present(); } void Gobby::HelpCommands::on_about_response(int id) { m_about_dialog.reset(NULL); } gobby-0.5.0/code/commands/help-commands.hpp0000644000175000017500000000275712370427450015531 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_HELP_COMMANDS_HPP_ #define _GOBBY_HELP_COMMANDS_HPP_ #include "core/header.hpp" #include "core/iconmanager.hpp" #include #include #include #include namespace Gobby { class HelpCommands: public sigc::trackable { public: HelpCommands(Gtk::Window& parent, Header& header, const IconManager& icon_manager); protected: void on_contents(); void on_about(); void on_about_response(int response_id); Gtk::Window& m_parent; Header& m_header; const IconManager& m_icon_manager; std::auto_ptr m_about_dialog; }; } #endif // _GOBBY_HELP_COMMANDS_HPP_ gobby-0.5.0/code/commands/edit-commands.hpp0000644000175000017500000001015512370427450015515 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_EDIT_COMMANDS_HPP_ #define _GOBBY_EDIT_COMMANDS_HPP_ #include "dialogs/find-dialog.hpp" #include "dialogs/goto-dialog.hpp" #include "dialogs/preferences-dialog.hpp" #include "core/header.hpp" #include "core/folder.hpp" #include "core/statusbar.hpp" #include #include #include namespace Gobby { class EditCommands: public sigc::trackable { public: EditCommands(Gtk::Window& parent, Header& header, const Folder& folder, StatusBar& status_bar, FileChooser& file_chooser, Preferences& preferences, CertificateManager& cert_manager); ~EditCommands(); protected: void on_document_removed(SessionView& view); void on_document_changed(SessionView* view); static void on_can_undo_changed_static(InfAdoptedAlgorithm* algorithm, InfAdoptedUser* user, gboolean can_undo, gpointer user_data) { static_cast(user_data)->on_can_undo_changed( user, can_undo); } static void on_can_redo_changed_static(InfAdoptedAlgorithm* algorithm, InfAdoptedUser* user, gboolean can_redo, gpointer user_data) { static_cast(user_data)->on_can_redo_changed( user, can_redo); } static void on_sync_complete_static(InfSession* session, InfXmlConnection* connection, gpointer user_data) { static_cast(user_data)->on_sync_complete(); } static void on_mark_set_static(GtkTextBuffer* buffer, GtkTextIter* iter, GtkTextMark* mark, gpointer user_data) { static_cast(user_data)->on_mark_set(); } static void on_changed_static(GtkTextBuffer* buffer, gpointer user_data) { static_cast(user_data)->on_changed(); } void on_sync_complete(); void on_active_user_changed(InfUser* active_user); void on_mark_set(); void on_changed(); void on_can_undo_changed(InfAdoptedUser* user, bool can_undo); void on_can_redo_changed(InfAdoptedUser* user, bool can_redo); void on_find_text_changed(); void on_undo(); void on_redo(); void on_cut(); void on_copy(); void on_paste(); void on_find(); void on_find_next(); void on_find_prev(); void on_find_replace(); void on_goto_line(); void on_preferences(); Gtk::Window& m_parent; Header& m_header; const Folder& m_folder; StatusBar& m_status_bar; FileChooser& m_file_chooser; Preferences& m_preferences; CertificateManager& m_cert_manager; std::auto_ptr m_find_dialog; std::auto_ptr m_goto_dialog; std::auto_ptr m_preferences_dialog; TextSessionView* m_current_view; // Only valid when m_current_document is nonzero: sigc::connection m_active_user_changed_connection; gulong m_can_undo_changed_handler; gulong m_can_redo_changed_handler; gulong m_synchronization_complete_handler; gulong m_mark_set_handler; gulong m_changed_handler; private: void ensure_find_dialog(); }; } #endif // _GOBBY_EDIT_COMMANDS_HPP_ gobby-0.5.0/code/commands/autosave-commands.cpp0000644000175000017500000002170312370427450016413 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/autosave-commands.hpp" #include "operations/operation-save.hpp" #include "core/sessionuserview.hpp" #include #include class Gobby::AutosaveCommands::Info { public: Info(AutosaveCommands& commands, TextSessionView& view): m_commands(commands), m_view(view), m_save_op(NULL) { GtkSourceBuffer* buffer = m_view.get_text_buffer(); m_modified_changed_handler = g_signal_connect_after( G_OBJECT(buffer), "modified-changed", G_CALLBACK(on_modified_changed_static), this); // We can't get this correct, so we assume the document was // synchronized to disk at the current time. If it has been // modified, we schedule a first autosave. m_sync_time = std::time(NULL); Operations& operations = m_commands.m_operations; OperationSave* save_op = operations.get_save_operation_for_document(view); if(save_op != NULL) begin_save_operation(save_op); else if(gtk_text_buffer_get_modified(GTK_TEXT_BUFFER(buffer))) schedule(); } ~Info() { GtkSourceBuffer* buffer = m_view.get_text_buffer(); g_signal_handler_disconnect(G_OBJECT(buffer), m_modified_changed_handler); m_timeout_handler.disconnect(); } // Called by AutosaveCommands when the timeout interval has changed. // Just reschedule the timeout. void reschedule() { if(m_timeout_handler.connected()) { m_timeout_handler.disconnect(); schedule(); } } // Called by AutosaveCommands void begin_save_operation(OperationSave* save_op) { g_assert(m_save_op == NULL); // The document is already being saved, so we don't // need to autosave anymore. Reschedule autosave when save // operation finished. if(m_timeout_handler.connected()) m_timeout_handler.disconnect(); m_save_op = save_op; m_save_op->signal_finished().connect( sigc::mem_fun( *this, &Info::on_save_operation_finished)); } protected: void on_modified_changed() { if(m_save_op == NULL) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER(m_view.get_text_buffer()); if(!gtk_text_buffer_get_modified(buffer)) m_timeout_handler.disconnect(); else { // Until now the document on disk is in sync // with the in-memory buffer. Now the document // has changed, so schedule an autosave. m_sync_time = std::time(NULL); schedule(); } } } void schedule() { g_assert(!m_timeout_handler.connected()); g_assert(m_save_op == NULL); // Don't schedule a timeout in case the document has no entry // in the document info storage. This means we don't have an // uri yet where to save the document. However, we // automatically retry when the document is assigned an URI, // since the modification flag will change with this anyway. const std::string& key = m_view.get_info_storage_key(); const DocumentInfoStorage::Info* info = m_commands.m_info_storage.get_info(key); if(!info || info->uri.empty()) return; guint elapsed_seconds = std::time(NULL) - m_sync_time; guint autosave_interval = 60 * m_commands.m_preferences.editor.autosave_interval; if(elapsed_seconds > autosave_interval) { on_timeout(); } else { m_timeout_handler = Glib::signal_timeout().connect_seconds( sigc::mem_fun( *this, &Info::on_timeout), autosave_interval - elapsed_seconds); } } void on_save_operation_finished(bool success) { GtkTextBuffer* buffer = GTK_TEXT_BUFFER(m_view.get_text_buffer()); if(success) m_sync_time = m_save_op->get_start_time(); m_save_op = NULL; // Schedule the next save operation in case the buffer has // been modified since the save operation was started. if(gtk_text_buffer_get_modified(buffer)) schedule(); } bool on_timeout() { const std::string& key = m_view.get_info_storage_key(); const DocumentInfoStorage::Info* info = m_commands.m_info_storage.get_info(key); // Might have been removed from info in the meanwhile, so // don't assert here. if(info != NULL) { m_commands.m_operations.save_document( m_view, info->uri, info->encoding, info->eol_style); g_assert(m_save_op != NULL); // Set sync time to operation's start time even though // we don't know yet whether the operation will fail, // because otherwise we would try to save the // document the whole time. This way, we simply retry // when the timeout triggers again. m_sync_time = m_save_op->get_start_time(); } return false; } private: static void on_modified_changed_static(GtkTextBuffer* buffer, gpointer user_data) { static_cast(user_data)->on_modified_changed(); } AutosaveCommands& m_commands; TextSessionView& m_view; gulong m_modified_changed_handler; sigc::connection m_timeout_handler; OperationSave* m_save_op; std::time_t m_sync_time; }; Gobby::AutosaveCommands::AutosaveCommands(const Folder& folder, Operations& operations, const DocumentInfoStorage& storage, const Preferences& preferences): m_folder(folder), m_operations(operations), m_info_storage(storage), m_preferences(preferences) { m_folder.signal_document_added().connect( sigc::mem_fun(*this, &AutosaveCommands::on_document_added)); m_folder.signal_document_removed().connect( sigc::mem_fun(*this, &AutosaveCommands::on_document_removed)); m_operations.signal_begin_save_operation().connect( sigc::mem_fun( *this, &AutosaveCommands::on_begin_save_operation)); m_preferences.editor.autosave_enabled.signal_changed().connect( sigc::mem_fun( *this, &AutosaveCommands::on_autosave_enabled_changed)); m_preferences.editor.autosave_interval.signal_changed().connect( sigc::mem_fun( *this, &AutosaveCommands::on_autosave_interval_changed)); // Create autosave infos for initial documents on_autosave_enabled_changed(); } Gobby::AutosaveCommands::~AutosaveCommands() { for(InfoMap::iterator iter = m_info_map.begin(); iter != m_info_map.end(); ++ iter) { delete iter->second; } } void Gobby::AutosaveCommands::on_document_added(SessionView& view) { if(m_preferences.editor.autosave_enabled) { // We can only save text views: TextSessionView* text_view = dynamic_cast(&view); if(text_view) { g_assert(m_info_map.find(text_view) == m_info_map.end()); m_info_map[text_view] = new Info(*this, *text_view); } } } void Gobby::AutosaveCommands::on_document_removed(SessionView& view) { if(m_preferences.editor.autosave_enabled) { TextSessionView* text_view = dynamic_cast(&view); if(text_view) { InfoMap::iterator iter = m_info_map.find(text_view); g_assert(iter != m_info_map.end()); delete iter->second; m_info_map.erase(iter); } } } void Gobby::AutosaveCommands::on_begin_save_operation( OperationSave* operation) { TextSessionView* view = operation->get_view(); // Save operation just started, document must be present g_assert(view != NULL); if(m_preferences.editor.autosave_enabled) { InfoMap::iterator iter = m_info_map.find(view); g_assert(iter != m_info_map.end()); iter->second->begin_save_operation(operation); } } void Gobby::AutosaveCommands::on_autosave_enabled_changed() { if(m_preferences.editor.autosave_enabled) { for(unsigned int i = 0; i < static_cast(m_folder.get_n_pages()); ++i) { // TODO: Add convenience API to folder, so that we // don't need to know here that it actually contains // SessionUserViews. const SessionUserView* userview = static_cast( m_folder.get_nth_page(i)); SessionView& view = userview->get_session_view(); TextSessionView* text_view = dynamic_cast(&view); if(text_view) { m_info_map[text_view] = new Info(*this, *text_view); } } } else { for(InfoMap::iterator iter = m_info_map.begin(); iter != m_info_map.end(); ++ iter) { delete iter->second; } m_info_map.clear(); } } void Gobby::AutosaveCommands::on_autosave_interval_changed() { // Propagate to infos for(InfoMap::iterator iter = m_info_map.begin(); iter != m_info_map.end(); ++ iter) { return iter->second->reschedule(); } } gobby-0.5.0/code/commands/browser-context-commands.hpp0000644000175000017500000000717112370427450017741 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_BROWSER_CONTEXT_COMMANDS_HPP_ #define _GOBBY_BROWSER_CONTEXT_COMMANDS_HPP_ #include "operations/operations.hpp" #include "dialogs/entry-dialog.hpp" #include "core/nodewatch.hpp" #include "core/browser.hpp" #include "core/filechooser.hpp" #include #include namespace Gobby { class BrowserContextCommands: public sigc::trackable { public: BrowserContextCommands(Gtk::Window& parent, InfIo* io, Browser& browser, FileChooser& chooser, Operations& operations, const CertificateManager& cert_manager, Preferences& prf); ~BrowserContextCommands(); protected: static void on_populate_popup_static(InfGtkBrowserView* view, GtkMenu* menu, gpointer user_data) { static_cast(user_data)-> on_populate_popup(Glib::wrap(menu)); } static void on_account_created_static( InfGtkAccountCreationDialog* dlg, gnutls_x509_privkey_t key, InfCertificateChain* certificate, const InfAclAccount* account, gpointer user_data) { static_cast(user_data)-> on_account_created(key, certificate, account); } void on_menu_node_removed(); void on_menu_deactivate(); void on_populate_popup(Gtk::Menu* menu); void on_popdown(); // Context commands void on_disconnect(InfcBrowser* browser); void on_create_account(InfBrowser* browser); void on_remove(InfBrowser* browser); void on_new(InfBrowser* browser, InfBrowserIter iter, bool directory); void on_open(InfBrowser* browser, InfBrowserIter iter); void on_permissions(InfBrowser* browser, InfBrowserIter iter); void on_delete(InfBrowser* browser, InfBrowserIter iter); void on_dialog_node_removed(); void on_create_account_response(int response_id); void on_account_created(gnutls_x509_privkey_t key, InfCertificateChain* certificate, const InfAclAccount* account); void on_account_created_response(int response_id); void on_new_response(int response_id, InfBrowser* browser, InfBrowserIter iter, bool directory); void on_open_response(int response_id, InfBrowser* browser, InfBrowserIter iter); void on_permissions_response(int response_id); Gtk::Window& m_parent; InfIo* m_io; Browser& m_browser; FileChooser& m_file_chooser; Operations& m_operations; const CertificateManager& m_cert_manager; Preferences& m_preferences; // Browser item for which Gtk::Menu* m_popup_menu; std::auto_ptr m_watch; std::auto_ptr m_dialog; gulong m_populate_popup_handler; }; } #endif // _GOBBY_BROWSER_CONTEXT_COMMANDS_HPP_ gobby-0.5.0/code/commands/file-commands.cpp0000644000175000017500000002152612370427450015506 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/file-commands.hpp" #include "commands/file-tasks/task-new.hpp" #include "commands/file-tasks/task-open-file.hpp" #include "commands/file-tasks/task-open-location.hpp" #include "commands/file-tasks/task-save.hpp" #include "commands/file-tasks/task-save-all.hpp" #include "commands/file-tasks/task-export-html.hpp" #include Gobby::FileCommands::Task::Task(FileCommands& file_commands): m_file_commands(file_commands) { } Gobby::FileCommands::Task::~Task() { } void Gobby::FileCommands::Task::finish() { // Note this could delete this: m_signal_finished.emit(); } Gtk::Window& Gobby::FileCommands::Task::get_parent() { return m_file_commands.m_parent; } const Gobby::Folder& Gobby::FileCommands::Task::get_folder() { return m_file_commands.m_folder_manager.get_text_folder(); } Gobby::StatusBar& Gobby::FileCommands::Task::get_status_bar() { return m_file_commands.m_status_bar; } Gobby::FileChooser& Gobby::FileCommands::Task::get_file_chooser() { return m_file_commands.m_file_chooser; } Gobby::Operations& Gobby::FileCommands::Task::get_operations() { return m_file_commands.m_operations; } const Gobby::DocumentInfoStorage& Gobby::FileCommands::Task::get_document_info_storage() { return m_file_commands.m_document_info_storage; } Gobby::Preferences& Gobby::FileCommands::Task::get_preferences() { return m_file_commands.m_preferences; } Gobby::DocumentLocationDialog& Gobby::FileCommands::Task::get_document_location_dialog() { if(m_file_commands.m_location_dialog.get() == NULL) { m_file_commands.m_location_dialog.reset( new DocumentLocationDialog( m_file_commands.m_parent, INF_GTK_BROWSER_MODEL( m_file_commands.m_browser. get_store()))); } return *m_file_commands.m_location_dialog; } Gobby::FileCommands::FileCommands(Gtk::Window& parent, Header& header, Browser& browser, FolderManager& folder_manager, StatusBar& status_bar, FileChooser& file_chooser, Operations& operations, const DocumentInfoStorage& info_storage, Preferences& preferences): m_parent(parent), m_header(header), m_browser(browser), m_folder_manager(folder_manager), m_status_bar(status_bar), m_file_chooser(file_chooser), m_operations(operations), m_document_info_storage(info_storage), m_preferences(preferences) { header.action_file_new->signal_activate().connect( sigc::mem_fun(*this, &FileCommands::on_new)); header.action_file_open->signal_activate().connect( sigc::mem_fun(*this, &FileCommands::on_open)); header.action_file_open_location->signal_activate().connect( sigc::mem_fun(*this, &FileCommands::on_open_location)); header.action_file_save->signal_activate().connect( sigc::mem_fun(*this, &FileCommands::on_save)); header.action_file_save_as->signal_activate().connect( sigc::mem_fun(*this, &FileCommands::on_save_as)); header.action_file_save_all->signal_activate().connect( sigc::mem_fun(*this, &FileCommands::on_save_all)); header.action_file_export_html->signal_activate().connect( sigc::mem_fun(*this, &FileCommands::on_export_html)); header.action_file_connect->signal_activate().connect( sigc::mem_fun(*this, &FileCommands::on_connect)); header.action_file_close->signal_activate().connect( sigc::mem_fun(*this, &FileCommands::on_close)); header.action_file_quit->signal_activate().connect( sigc::mem_fun(*this, &FileCommands::on_quit)); folder_manager.get_text_folder().signal_document_changed().connect( sigc::mem_fun(*this, &FileCommands::on_document_changed)); InfGtkBrowserModelSort* store = browser.get_store(); m_row_inserted_handler = g_signal_connect(G_OBJECT(store), "row-inserted", G_CALLBACK(on_row_inserted_static), this); m_row_deleted_handler = g_signal_connect(G_OBJECT(store), "row-deleted", G_CALLBACK(on_row_deleted_static), this); update_sensitivity(); } Gobby::FileCommands::~FileCommands() { InfGtkBrowserModelSort* store = m_browser.get_store(); g_signal_handler_disconnect(G_OBJECT(store), m_row_inserted_handler); g_signal_handler_disconnect(G_OBJECT(store), m_row_deleted_handler); } void Gobby::FileCommands::set_task(Task* task) { task->signal_finished().connect(sigc::mem_fun( *this, &FileCommands::on_task_finished)); m_task.reset(task); task->run(); } void Gobby::FileCommands::on_document_changed(SessionView* view) { update_sensitivity(); } void Gobby::FileCommands::on_row_inserted() { update_sensitivity(); } void Gobby::FileCommands::on_row_deleted() { update_sensitivity(); } void Gobby::FileCommands::on_task_finished() { m_task.reset(NULL); } void Gobby::FileCommands::on_new() { set_task(new TaskNew(*this)); } void Gobby::FileCommands::on_open() { set_task(new TaskOpenFile(*this)); } void Gobby::FileCommands::on_open_location() { set_task(new TaskOpenLocation(*this)); } void Gobby::FileCommands::on_save() { SessionView* view = m_folder_manager.get_text_folder().get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); const DocumentInfoStorage::Info* info = m_document_info_storage.get_info( text_view->get_info_storage_key()); if(info != NULL && !info->uri.empty()) { m_operations.save_document( *text_view, info->uri, info->encoding, info->eol_style); } else { on_save_as(); } } void Gobby::FileCommands::on_save_as() { SessionView* view = m_folder_manager.get_text_folder().get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); set_task(new TaskSave(*this, *text_view)); } void Gobby::FileCommands::on_save_all() { set_task(new TaskSaveAll(*this)); } void Gobby::FileCommands::on_export_html() { SessionView* view = m_folder_manager.get_text_folder().get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); set_task(new TaskExportHtml(*this, *text_view)); } void Gobby::FileCommands::on_connect() { if(m_connection_dialog.get() == NULL) { m_connection_dialog.reset(new ConnectionDialog(m_parent)); m_connection_dialog->signal_response().connect( sigc::mem_fun(*this, &FileCommands::on_connect_response)); m_connection_dialog->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); m_connection_dialog->add_button(Gtk::Stock::CONNECT, Gtk::RESPONSE_ACCEPT); } m_connection_dialog->present(); } void Gobby::FileCommands::on_close() { SessionView* view = m_folder_manager.get_text_folder().get_current_document(); g_assert(view != NULL); m_folder_manager.remove_document(*view); } void Gobby::FileCommands::on_quit() { m_parent.hide(); } void Gobby::FileCommands::on_connect_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { const Glib::ustring& host = m_connection_dialog->get_host_name(); if(!host.empty()) { m_operations.subscribe_path(host); } } m_connection_dialog->hide(); } void Gobby::FileCommands::update_sensitivity() { GtkTreeIter dummy_iter; bool create_sensitivity = gtk_tree_model_get_iter_first( GTK_TREE_MODEL(m_browser.get_store()), &dummy_iter); SessionView* view = m_folder_manager.get_text_folder().get_current_document(); gboolean view_sensitivity = view != NULL; // We can only save text documents currently gboolean text_sensitivity = dynamic_cast(view) != NULL; m_header.action_file_new->set_sensitive(create_sensitivity); m_header.action_file_open->set_sensitive(create_sensitivity); m_header.action_file_open_location->set_sensitive(create_sensitivity); m_header.action_file_save->set_sensitive(text_sensitivity); m_header.action_file_save_as->set_sensitive(text_sensitivity); m_header.action_file_save_all->set_sensitive(text_sensitivity); m_header.action_file_export_html->set_sensitive(text_sensitivity); m_header.action_file_close->set_sensitive(view_sensitivity); } gobby-0.5.0/code/commands/view-commands.hpp0000644000175000017500000000642212370466747015560 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_VIEW_COMMANDS_HPP_ #define _GOBBY_VIEW_COMMANDS_HPP_ #include "core/header.hpp" #include "core/folder.hpp" #include "core/closableframe.hpp" #include namespace Gobby { class ViewCommands: public sigc::trackable { private: class Fullscreen; public: ViewCommands(Gtk::Window& main_window, Header& header, const Folder& text_folder, ClosableFrame& chat_frame, const Folder& chat_folder, Preferences& preferences); ~ViewCommands(); protected: void on_text_document_changed(SessionView* view); void on_chat_document_added(SessionView& view); void on_chat_document_removed(SessionView& view); void on_chat_document_changed(SessionView* view); void on_chat_show(); void on_chat_hide(); void on_hide_user_colors(); void on_fullscreen_toggled(); void on_zoom_in(); void on_zoom_out(); void on_menu_toolbar_toggled(); void on_menu_statusbar_toggled(); void on_menu_browser_toggled(); void on_menu_chat_toggled(); void on_menu_document_userlist_toggled(); void on_menu_chat_userlist_toggled(); void on_pref_toolbar_changed(); void on_pref_statusbar_changed(); void on_pref_browser_changed(); void on_pref_chat_changed(); void on_pref_document_userlist_changed(); void on_pref_chat_userlist_changed(); void on_menu_language_changed( const Glib::RefPtr& action); void on_doc_language_changed(GtkSourceLanguage* language); Gtk::Window& m_main_window; Header& m_header; const Folder& m_text_folder; ClosableFrame& m_chat_frame; const Folder& m_chat_folder; Preferences& m_preferences; TextSessionView* m_current_view; std::auto_ptr m_fullscreen; sigc::connection m_menu_language_changed_connection; sigc::connection m_document_language_changed_connection; sigc::connection m_menu_view_toolbar_connection; sigc::connection m_menu_view_statusbar_connection; sigc::connection m_menu_view_browser_connection; sigc::connection m_menu_view_chat_connection; sigc::connection m_menu_view_document_userlist_connection; sigc::connection m_menu_view_chat_userlist_connection; sigc::connection m_pref_view_statusbar_connection; sigc::connection m_pref_view_toolbar_connection; sigc::connection m_pref_view_browser_connection; sigc::connection m_pref_view_chat_connection; sigc::connection m_pref_view_document_userlist_connection; sigc::connection m_pref_view_chat_userlist_connection; private: void ensure_find_dialog(); }; } #endif // _GOBBY_VIEW_COMMANDS_HPP_ gobby-0.5.0/code/commands/autosave-commands.hpp0000644000175000017500000000350412370427450016417 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_AUTOSAVE_COMMANDS_HPP_ #define _GOBBY_AUTOSAVE_COMMANDS_HPP_ #include #include "operations/operations.hpp" #include "core/folder.hpp" #include "core/documentinfostorage.hpp" #include "core/preferences.hpp" namespace Gobby { class AutosaveCommands: public sigc::trackable { public: AutosaveCommands(const Folder& folder, Operations& operations, const DocumentInfoStorage& storage, const Preferences& preferences); ~AutosaveCommands(); protected: void on_document_added(SessionView& view); void on_document_removed(SessionView& view); void on_begin_save_operation(OperationSave* operation); void on_autosave_enabled_changed(); void on_autosave_interval_changed(); const Folder& m_folder; Operations& m_operations; const DocumentInfoStorage& m_info_storage; const Preferences& m_preferences; class Info; typedef std::map InfoMap; InfoMap m_info_map; }; } #endif // _GOBBY_AUTOSAVE_COMMANDS_HPP_ gobby-0.5.0/code/commands/subscription-commands.cpp0000644000175000017500000001173212370427450017311 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/subscription-commands.hpp" #include "util/i18n.hpp" class Gobby::SubscriptionCommands::SessionInfo { public: SessionInfo(SubscriptionCommands& commands, const Folder& folder, InfSession* session): m_folder(folder), m_session(session) { g_object_ref(session); m_notify_subscription_group_handler = g_signal_connect( G_OBJECT(session), "notify::subscription-group", G_CALLBACK(on_notify_subscription_group_static), &commands); } ~SessionInfo() { g_signal_handler_disconnect( G_OBJECT(m_session), m_notify_subscription_group_handler); g_object_unref(m_session); } const Folder& get_folder() { return m_folder; } InfSession* get_session() { return m_session; } private: static void on_notify_subscription_group_static(InfSession* session, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)-> on_notify_subscription_group(session); } const Folder& m_folder; InfSession* m_session; gulong m_notify_subscription_group_handler; }; Gobby::SubscriptionCommands::SubscriptionCommands(const Folder& text_folder, const Folder& chat_folder): m_text_folder(text_folder), m_chat_folder(chat_folder) { m_text_folder.signal_document_added().connect( sigc::mem_fun( *this, &SubscriptionCommands::on_text_document_added)); m_chat_folder.signal_document_added().connect( sigc::mem_fun( *this, &SubscriptionCommands::on_chat_document_added)); m_text_folder.signal_document_removed().connect( sigc::mem_fun( *this, &SubscriptionCommands::on_document_removed)); m_chat_folder.signal_document_removed().connect( sigc::mem_fun( *this, &SubscriptionCommands::on_document_removed)); } Gobby::SubscriptionCommands::~SubscriptionCommands() { for(SessionMap::iterator iter = m_session_map.begin(); iter != m_session_map.end(); ++iter) { delete iter->second; } } void Gobby::SubscriptionCommands::on_text_document_added(SessionView& view) { InfSession* session = view.get_session(); g_assert(m_session_map.find(session) == m_session_map.end()); m_session_map[session] = new SessionInfo(*this, m_text_folder, session); } void Gobby::SubscriptionCommands::on_chat_document_added(SessionView& view) { InfSession* session = view.get_session(); g_assert(m_session_map.find(session) == m_session_map.end()); m_session_map[session] = new SessionInfo(*this, m_chat_folder, session); } void Gobby::SubscriptionCommands::on_document_removed(SessionView& view) { InfSession* session = view.get_session(); SessionMap::iterator iter = m_session_map.find(session); g_assert(iter != m_session_map.end()); delete iter->second; m_session_map.erase(iter); } void Gobby::SubscriptionCommands:: on_notify_subscription_group(InfSession* session) { SessionMap::iterator iter = m_session_map.find(session); g_assert(iter != m_session_map.end()); if(inf_session_get_subscription_group(session) == NULL) { const Folder& folder = iter->second->get_folder(); SessionView* view = folder.lookup_document(session); g_assert(view != NULL); TextSessionView* text_view = dynamic_cast(view); ChatSessionView* chat_view = dynamic_cast(view); if(text_view) { /* If the session is in SYNCHRONIZING state then the * session is closed due to a synchronization error. * In that case synchronization-commands.cpp will set * a more meaningful error message. */ if(inf_session_get_status(session) == INF_SESSION_RUNNING) { view->set_info(_( "The connection to the publisher of " "this document has been lost. " "Further changes to the document " "could not be synchronized to others " "anymore, therefore the document " "cannot be edited anymore.\n\n" "Please note also that it is " "possible that not all of your " "latest changes have reached the " "publisher before the connection was " "lost."), true); } text_view->set_active_user(NULL); } else if(chat_view) { chat_view->set_active_user(NULL); } } } gobby-0.5.0/code/commands/Makefile.am0000644000175000017500000000164112370042071014304 00000000000000SUBDIRS = file-tasks noinst_LIBRARIES = libgobby-commands.a libgobby_commands_a_SOURCES = \ auth-commands.cpp \ autosave-commands.cpp \ browser-commands.cpp \ browser-context-commands.cpp \ edit-commands.cpp \ file-commands.cpp \ folder-commands.cpp \ help-commands.cpp \ subscription-commands.cpp \ synchronization-commands.cpp \ user-join-commands.cpp \ view-commands.cpp noinst_HEADERS = \ auth-commands.hpp \ autosave-commands.hpp \ browser-commands.hpp \ browser-context-commands.hpp \ edit-commands.hpp \ file-commands.hpp \ folder-commands.hpp \ help-commands.hpp \ subscription-commands.hpp \ synchronization-commands.hpp \ user-join-commands.hpp \ view-commands.hpp appicondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/gobby-0.5 AM_CPPFLAGS = $(gobby_CFLAGS) $(unique_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code gobby-0.5.0/code/commands/folder-commands.cpp0000644000175000017500000002050612370427450016037 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/folder-commands.hpp" #include "core/sessionuserview.hpp" #include #include // TODO: Make this work with non-text documents also... maybe split & // share a base class... or better: Move active user stuff to SessionView // base. All SessionView's should be modifyable by the user, and if there are // document types gobby only supports in a read-only kind of way the active // user can just be NULL all the time. class Gobby::FolderCommands::DocInfo: public sigc::trackable { public: static const unsigned int ACTIVATION_DELAY = 1000; DocInfo(SessionView& view): m_view(view), m_active_user(NULL), m_active(false) { m_view.signal_active_user_changed().connect( sigc::mem_fun( *this, &DocInfo::on_active_user_changed)); on_active_user_changed(view.get_active_user()); } virtual ~DocInfo() { if(m_active_user != NULL) { g_signal_handler_disconnect(G_OBJECT(m_active_user), m_notify_status_handle); } } virtual void deactivate() { m_active = false; if(m_active_user) deactivate_user(); } virtual void activate() { m_active = true; if(m_active_user) activate_user(); } virtual void flush() {} protected: void activate_user() { g_assert(!m_timeout_connection.connected()); g_assert(m_active_user != NULL); g_assert(inf_user_get_status(m_active_user) == INF_USER_INACTIVE); m_timeout_connection = Glib::signal_timeout().connect( sigc::mem_fun(*this, &DocInfo::on_activation_timeout), ACTIVATION_DELAY); } void deactivate_user() { g_assert(m_active_user != NULL); switch(inf_user_get_status(m_active_user)) { case INF_USER_INACTIVE: g_assert(m_timeout_connection.connected()); m_timeout_connection.disconnect(); break; case INF_USER_ACTIVE: /* Flush pending requests, so user is not set active * again later. TODO: Maybe this should become a * virtual function in InfSession actually. */ flush(); inf_session_set_user_status( INF_SESSION(m_view.get_session()), m_active_user, INF_USER_INACTIVE); break; case INF_USER_UNAVAILABLE: // It can happen that the user is already unavailable // here, for example when we have lost the connection // to the server, so this is not an error. // If the user was active before we lost the // connection then cancel the activation timeout if(m_timeout_connection.connected()) m_timeout_connection.disconnect(); // TODO: Shouldn't local users stay available on // connection loss? We probably need to fix this // in infinote. break; } } static void on_user_notify_status_static(InfUser* user, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)->on_user_notify_status(user); } void on_active_user_changed(InfUser* user) { if(m_active_user != NULL) { if(m_active) deactivate_user(); g_signal_handler_disconnect(G_OBJECT(m_active_user), m_notify_status_handle); } m_active_user = user; if(user != NULL) { InfUserStatus user_status = inf_user_get_status(INF_USER(user)); g_assert(user_status != INF_USER_UNAVAILABLE); m_notify_status_handle = g_signal_connect( G_OBJECT(user), "notify::status", G_CALLBACK(&on_user_notify_status_static), this ); if( (user_status == INF_USER_ACTIVE && !m_active)) { deactivate_user(); } else if(user_status == INF_USER_INACTIVE && m_active) { activate_user(); } } } void on_user_notify_status(InfUser* user) { // User cannot be activated when we are not active g_assert(m_active || inf_user_get_status(user) != INF_USER_ACTIVE); if(inf_user_get_status(user) == INF_USER_ACTIVE && m_active) { // The user did something (therefore becoming active), // so we do not need to explictely activate the user. g_assert(m_timeout_connection.connected()); m_timeout_connection.disconnect(); } } bool on_activation_timeout() { // The user activated this document, but did not something for // a while, so explicitely set the user active g_assert(m_active); g_assert(m_active_user != NULL); g_assert(inf_user_get_status(m_active_user) == INF_USER_INACTIVE); inf_session_set_user_status( INF_SESSION(m_view.get_session()), m_active_user, INF_USER_ACTIVE); return false; } SessionView& m_view; InfUser* m_active_user; bool m_active; sigc::connection m_timeout_connection; gulong m_notify_status_handle; }; class Gobby::FolderCommands::TextDocInfo: public Gobby::FolderCommands::DocInfo { public: TextDocInfo(TextSessionView& view): DocInfo(view) {} virtual void activate() { DocInfo::activate(); InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer(m_view.get_session())); inf_text_gtk_buffer_set_wake_on_cursor_movement( buffer, TRUE); } virtual void deactivate() { DocInfo::deactivate(); InfTextGtkBuffer* buffer = INF_TEXT_GTK_BUFFER( inf_session_get_buffer(m_view.get_session())); inf_text_gtk_buffer_set_wake_on_cursor_movement( buffer, FALSE); } virtual void flush() { DocInfo::flush(); g_assert(m_active_user != NULL); inf_text_session_flush_requests_for_user( INF_TEXT_SESSION(m_view.get_session()), INF_TEXT_USER(m_active_user)); } }; Gobby::FolderCommands::FolderCommands(const Folder& folder): m_folder(folder), m_current_view(NULL) { m_folder.signal_document_added().connect( sigc::mem_fun(*this, &FolderCommands::on_document_added)); m_folder.signal_document_removed().connect( sigc::mem_fun(*this, &FolderCommands::on_document_removed)); m_folder.signal_document_changed().connect( sigc::mem_fun(*this, &FolderCommands::on_document_changed)); const unsigned int n_pages = static_cast(m_folder.get_n_pages()); for(unsigned int i = 0; i < n_pages; ++i) { // TODO: Convenience API in Folder to retrieve SessionView, // so that we don't need to know about SessionUserView here. const SessionUserView* user_view = static_cast( m_folder.get_nth_page(i)); SessionView& view = user_view->get_session_view(); on_document_added(view); } on_document_changed(m_folder.get_current_document()); } Gobby::FolderCommands::~FolderCommands() { for(DocumentMap::iterator iter = m_doc_map.begin(); iter != m_doc_map.end(); ++ iter) { delete iter->second; } } void Gobby::FolderCommands::on_document_added(SessionView& view) { DocInfo* info; { TextSessionView* text_view = dynamic_cast(&view); if(text_view) info = new TextDocInfo(*text_view); else info = new DocInfo(view); } m_doc_map[&view] = info; } void Gobby::FolderCommands::on_document_removed(SessionView& view) { DocumentMap::iterator iter = m_doc_map.find(&view); g_assert(iter != m_doc_map.end()); delete iter->second; m_doc_map.erase(iter); // TODO: Isn't this called by Folder already? Would need to // call changed first and then removed of course. We could // then assert here. if(&view == m_current_view) m_current_view = NULL; } void Gobby::FolderCommands::on_document_changed(SessionView* view) { if(m_current_view != NULL) { DocumentMap::iterator iter = m_doc_map.find(m_current_view); g_assert(iter != m_doc_map.end()); iter->second->deactivate(); } m_current_view = view; if(m_current_view != NULL) { DocumentMap::iterator iter = m_doc_map.find(m_current_view); g_assert(iter != m_doc_map.end()); iter->second->activate(); } } gobby-0.5.0/code/commands/synchronization-commands.cpp0000644000175000017500000001743512370427450020034 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/synchronization-commands.hpp" #include "util/i18n.hpp" namespace { inline const gchar* _(const gchar* msgid) { return Gobby::_(msgid); } void set_progress_text(Gobby::SessionView& view, gdouble percentage) { view.set_info( Glib::ustring::compose( _("Synchronization in progress... %1%%"), static_cast(percentage * 100)), false); } void set_error_text(Gobby::SessionView& view, const Glib::ustring& initial_text) { Glib::ustring type_text; // Document cannot be used if an error happened // during synchronization. type_text = _("This document cannot be used."); const Glib::ustring info_text = _("If you have an idea what could have caused the " "problem, then you may attempt to solve it and " "try again (after having closed this document). " "Otherwise it is most likely a bug in the " "software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and " "provide as much information as you can, including " "what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we " "can fix the problem in a later version. " "Thank you."); view.set_info( Glib::ustring::compose( _("Synchronization failed: %1"), initial_text) + "\n\n" + type_text + "\n\n" + info_text, true); } } class Gobby::SynchronizationCommands::SyncInfo { public: SyncInfo(SynchronizationCommands& sync_commands, SessionView& view); ~SyncInfo(); SessionView& get_session_view() { return m_view; } private: static void on_synchronization_failed_static(InfSession* session, InfXmlConnection* conn, const GError* error, gpointer user_data) { static_cast(user_data)-> on_synchronization_failed(session, conn, error); } static void on_synchronization_complete_static(InfSession* session, InfXmlConnection* conn, gpointer user_data) { static_cast(user_data)-> on_synchronization_complete(session, conn); } static void on_synchronization_progress_static(InfSession* session, InfXmlConnection* conn, gdouble percentage, gpointer user_data) { static_cast(user_data)-> on_synchronization_progress(conn, percentage); } void on_synchronization_progress(InfXmlConnection* conn, gdouble percentage); SessionView& m_view; gulong m_synchronization_complete_handler; gulong m_synchronization_failed_handler; gulong m_synchronization_progress_handler; }; Gobby::SynchronizationCommands::SyncInfo:: SyncInfo(SynchronizationCommands& commands, SessionView& view): m_view(view) { InfSession* session = m_view.get_session(); m_synchronization_complete_handler = g_signal_connect( G_OBJECT(session), "synchronization-complete", G_CALLBACK(on_synchronization_complete_static), &commands); m_synchronization_failed_handler = g_signal_connect( G_OBJECT(session), "synchronization-failed", G_CALLBACK(on_synchronization_failed_static), &commands); m_synchronization_progress_handler = g_signal_connect( G_OBJECT(session), "synchronization-progress", G_CALLBACK(on_synchronization_progress_static), this); } Gobby::SynchronizationCommands::SyncInfo::~SyncInfo() { InfSession* session = m_view.get_session(); g_signal_handler_disconnect(G_OBJECT(session), m_synchronization_complete_handler); g_signal_handler_disconnect(G_OBJECT(session), m_synchronization_failed_handler); g_signal_handler_disconnect(G_OBJECT(session), m_synchronization_progress_handler); } void Gobby::SynchronizationCommands::SyncInfo:: on_synchronization_progress(InfXmlConnection* conn, gdouble percentage) { set_progress_text(m_view, percentage); } Gobby::SynchronizationCommands:: SynchronizationCommands(const Folder& text_folder, const Folder& chat_folder) { text_folder.signal_document_added().connect( sigc::mem_fun( *this, &SynchronizationCommands::on_document_added)); chat_folder.signal_document_added().connect( sigc::mem_fun( *this, &SynchronizationCommands::on_document_added)); text_folder.signal_document_removed().connect( sigc::mem_fun( *this, &SynchronizationCommands::on_document_removed)); text_folder.signal_document_removed().connect( sigc::mem_fun( *this, &SynchronizationCommands::on_document_removed)); } Gobby::SynchronizationCommands::~SynchronizationCommands() { for(SyncMap::iterator iter = m_sync_map.begin(); iter != m_sync_map.end(); ++iter) { delete iter->second; } } void Gobby::SynchronizationCommands::on_document_added(SessionView& view) { InfSession* session = view.get_session(); if(inf_session_get_status(session) == INF_SESSION_SYNCHRONIZING) { InfXmlConnection* connection; g_object_get(G_OBJECT(session), "sync-connection", &connection, NULL); gdouble percentage = inf_session_get_synchronization_progress( session, connection); g_object_unref(connection); g_assert(m_sync_map.find(session) == m_sync_map.end()); m_sync_map[session] = new SyncInfo(*this, view); set_progress_text(view, percentage); } } void Gobby::SynchronizationCommands::on_document_removed(SessionView& view) { InfSession* session = view.get_session(); SyncMap::iterator iter = m_sync_map.find(session); if(iter != m_sync_map.end()) { delete iter->second; m_sync_map.erase(iter); } } void Gobby::SynchronizationCommands:: on_synchronization_failed(InfSession* session, InfXmlConnection* c, const GError* error) { SyncMap::iterator iter = m_sync_map.find(session); g_assert(iter != m_sync_map.end()); set_error_text(iter->second->get_session_view(), error->message); // The document will be of no use anyway, so consider it as not // being modified. InfBuffer* buffer = inf_session_get_buffer(session); inf_buffer_set_modified(buffer, FALSE); delete iter->second; m_sync_map.erase(iter); } void Gobby::SynchronizationCommands:: on_synchronization_complete(InfSession* session, InfXmlConnection* c) { SyncMap::iterator iter = m_sync_map.find(session); g_assert(iter != m_sync_map.end()); // TODO: Actually we should always set the modified flag, except the // document is either empty, or known in the document info storage // and the version on disk is the same as the one we got // synchronized. We could store a hash and modification time in the // documentinfo storage for this. InfBuffer* buffer = inf_session_get_buffer(session); inf_buffer_set_modified(buffer, FALSE); delete iter->second; m_sync_map.erase(iter); } gobby-0.5.0/code/commands/browser-commands.cpp0000644000175000017500000004057512375141577016267 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/browser-commands.hpp" #include "util/i18n.hpp" #include #include namespace { void count_available_users_func(InfUser* user, gpointer user_data) { if(inf_user_get_status(user) != INF_USER_UNAVAILABLE && ~inf_user_get_flags(user) & INF_USER_LOCAL) { ++(*(unsigned int*)user_data); } } unsigned int count_available_users(InfUserTable* user_table) { // Count available remote users unsigned int n_users = 0; inf_user_table_foreach_user( user_table, count_available_users_func, &n_users); return n_users; } class ParameterProvider: public Gobby::UserJoin::ParameterProvider { public: ParameterProvider(const Gobby::Preferences& preferences): m_preferences(preferences) { } virtual std::vector get_user_join_parameters(); const Gobby::Preferences& m_preferences; }; std::vector ParameterProvider::get_user_join_parameters() { std::vector params; const GParameter name_param = { "name", { 0 } }; params.push_back(name_param); const GParameter status_param = { "status", { 0 } }; params.push_back(status_param); g_value_init(¶ms[0].value, G_TYPE_STRING); g_value_init(¶ms[1].value, INF_TYPE_USER_STATUS); const Glib::ustring& name = m_preferences.user.name; g_value_set_string(¶ms[0].value, name.c_str()); g_value_set_enum(¶ms[1].value, INF_USER_INACTIVE); return params; } } class Gobby::BrowserCommands::BrowserInfo { public: BrowserInfo(BrowserCommands& commands, InfBrowser* browser); ~BrowserInfo(); InfBrowser* get_browser() { return m_browser; } void set_pending_chat(InfSessionProxy* proxy); void clear_pending_chat(); void check_pending_chat(); private: static void on_notify_status_static(GObject* object, GParamSpec* pspec, gpointer user_data) { static_cast(user_data)->on_notify_status( INF_BROWSER(object)); } static void on_add_available_user_static(InfUserTable* user_table, InfUser* user, gpointer user_data) { static_cast(user_data)->check_pending_chat(); } BrowserCommands& m_commands; std::auto_ptr m_userjoin; InfBrowser* m_browser; gulong m_notify_status_handler; InfSessionProxy* m_pending_chat; gulong m_add_available_user_handler; }; class Gobby::BrowserCommands::RequestInfo { friend class BrowserCommands; public: RequestInfo(BrowserCommands& commands, InfBrowser* browser, InfBrowserIter* iter, StatusBar& status_bar); ~RequestInfo(); InfBrowser* get_browser() { return m_browser; } void set_request(InfRequest* request); private: static void on_node_finished_static(InfRequest* request, const InfRequestResult* result, const GError* error, gpointer user_data) { const InfBrowserIter* iter = NULL; RequestInfo* info = static_cast(user_data); if(error == NULL) { inf_request_result_get_subscribe_session( result, NULL, &iter, NULL); g_assert(iter == NULL || iter->node == info->m_iter.node); g_assert(iter == NULL || iter->node_id == info->m_iter.node_id); } info->m_commands.on_finished( INF_REQUEST(request), info->m_browser, iter, error); } static void on_chat_finished_static(InfRequest* request, const InfRequestResult* result, const GError* error, gpointer user_data) { RequestInfo* info = static_cast(user_data); info->m_commands.on_finished( INF_REQUEST(request), info->m_browser, NULL, error); } BrowserCommands& m_commands; InfBrowser* m_browser; InfBrowserIter m_iter; StatusBar& m_status_bar; StatusBar::MessageHandle m_handle; InfRequest* m_request; gulong m_finished_handler; }; Gobby::BrowserCommands::BrowserInfo::BrowserInfo(BrowserCommands& cmds, InfBrowser* browser): m_commands(cmds), m_browser(browser), m_pending_chat(NULL) { m_notify_status_handler = g_signal_connect( m_browser, "notify::status", G_CALLBACK(on_notify_status_static), &cmds); g_object_ref(browser); } Gobby::BrowserCommands::BrowserInfo::~BrowserInfo() { if(m_pending_chat != NULL) { InfSession* session; g_object_get(G_OBJECT(m_pending_chat), "session", &session, NULL); InfUserTable* table = inf_session_get_user_table(session); g_signal_handler_disconnect( table, m_add_available_user_handler); g_object_unref(session); g_object_unref(m_pending_chat); } g_signal_handler_disconnect(m_browser, m_notify_status_handler); g_object_unref(m_browser); } void Gobby::BrowserCommands::BrowserInfo::set_pending_chat(InfSessionProxy* proxy) { g_assert(m_pending_chat == NULL); m_pending_chat = proxy; g_object_ref(proxy); InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); InfUserTable* table = inf_session_get_user_table(session); m_add_available_user_handler = g_signal_connect( G_OBJECT(table), "add-available-user", G_CALLBACK(on_add_available_user_static), this); g_object_unref(session); // Attempt a user join already here before the document is added to // the folder manager so that we can correctly show the document when // enough users are available. Otherwise if no party would join a user // before other users show up, the chat would never be shown. std::auto_ptr provider( new ParameterProvider(m_commands.m_preferences)); m_userjoin.reset(new UserJoin(m_browser, NULL, proxy, provider)); check_pending_chat(); } void Gobby::BrowserCommands::BrowserInfo::clear_pending_chat() { if(m_pending_chat != NULL) { InfSession* session; g_object_get(G_OBJECT(m_pending_chat), "session", &session, NULL); InfUserTable* table = inf_session_get_user_table(session); g_signal_handler_disconnect( table, m_add_available_user_handler); m_userjoin.reset(NULL); g_object_unref(m_pending_chat); m_pending_chat = NULL; g_object_unref(session); } } void Gobby::BrowserCommands::BrowserInfo::check_pending_chat() { g_assert(m_pending_chat != NULL); InfSession* session; g_object_get(G_OBJECT(m_pending_chat), "session", &session, NULL); InfUserTable* table = inf_session_get_user_table(session); if(count_available_users(table) > 0) { g_signal_handler_disconnect( table, m_add_available_user_handler); m_commands.m_folder_manager.add_document( m_browser, NULL, m_pending_chat, &m_userjoin); g_object_unref(m_pending_chat); m_pending_chat = NULL; } g_object_unref(session); } Gobby::BrowserCommands::RequestInfo::RequestInfo(BrowserCommands& commands, InfBrowser* browser, InfBrowserIter* iter, StatusBar& status_bar): m_commands(commands), m_browser(browser), m_status_bar(status_bar), m_request(NULL), m_finished_handler(0) { if(iter) { m_iter = *iter; m_handle = m_status_bar.add_info_message( Glib::ustring::compose( _("Subscribing to %1..."), Glib::ustring( inf_browser_get_node_name( browser, iter)))); } else { InfXmlConnection* connection = infc_browser_get_connection(INFC_BROWSER(browser)); gchar* remote_hostname; g_object_get(G_OBJECT(connection), "remote-hostname", &remote_hostname, NULL); m_handle = m_status_bar.add_info_message( Glib::ustring::compose( _("Subscribing to chat on %1..."), remote_hostname)); g_free(remote_hostname); } } Gobby::BrowserCommands::RequestInfo::~RequestInfo() { m_status_bar.remove_message(m_handle); if(m_request != NULL) { g_signal_handler_disconnect(m_request, m_finished_handler); g_object_unref(m_request); } } void Gobby::BrowserCommands::RequestInfo::set_request(InfRequest* request) { g_assert(m_request == NULL); m_finished_handler = g_signal_handler_find( request, G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, this); g_assert(m_finished_handler != 0); } Gobby::BrowserCommands::BrowserCommands(Browser& browser, FolderManager& folder_manager, StatusBar& status_bar, Operations& operations, const Preferences& preferences): m_browser(browser), m_folder_manager(folder_manager), m_operations(operations), m_status_bar(status_bar), m_preferences(preferences) { m_browser.signal_connect().connect( sigc::mem_fun(*this, &BrowserCommands::on_connect)); m_browser.signal_activate().connect( sigc::mem_fun(*this, &BrowserCommands::on_activate)); m_set_browser_handler = g_signal_connect( browser.get_store(), "set-browser", G_CALLBACK(on_set_browser_static), this); } Gobby::BrowserCommands::~BrowserCommands() { for(RequestMap::iterator iter = m_request_map.begin(); iter != m_request_map.end(); ++ iter) { delete iter->second; } for(BrowserMap::iterator iter = m_browser_map.begin(); iter != m_browser_map.end(); ++iter) { delete iter->second; } g_signal_handler_disconnect(m_browser.get_store(), m_set_browser_handler); } void Gobby::BrowserCommands::on_set_browser(InfGtkBrowserModel* model, GtkTreeIter* iter, InfBrowser* old_browser, InfBrowser* new_browser) { if(old_browser != NULL) { // Find by browser in case old_browser has its connection // reset. BrowserMap::iterator iter = m_browser_map.find(old_browser); g_assert(iter != m_browser_map.end()); delete iter->second; m_browser_map.erase(iter); } if(new_browser != NULL) { g_assert(m_browser_map.find(new_browser) == m_browser_map.end()); InfBrowserStatus browser_status; g_object_get( G_OBJECT(new_browser), "status", &browser_status, NULL); m_browser_map[new_browser] = new BrowserInfo(*this, new_browser); if(browser_status == INF_BROWSER_OPEN) if(!create_chat_document(new_browser)) subscribe_chat(new_browser); } } void Gobby::BrowserCommands::on_notify_status(InfBrowser* browser) { InfXmlConnection* connection; InfXmlConnectionStatus status; InfBrowserStatus browser_status; const BrowserMap::iterator iter = m_browser_map.find(browser); g_assert(iter != m_browser_map.end()); g_object_get(G_OBJECT(browser), "status", &browser_status, NULL); switch(browser_status) { case INF_BROWSER_CLOSED: iter->second->clear_pending_chat(); // Close connection if browser got disconnected. This for // example happens when the server does not send an initial // welcome message. if(INFC_IS_BROWSER(browser)) { connection = infc_browser_get_connection( INFC_BROWSER(browser)); g_object_get(G_OBJECT(connection), "status", &status, NULL); if(status != INF_XML_CONNECTION_CLOSED && status != INF_XML_CONNECTION_CLOSING) { inf_xml_connection_close(connection); } } break; case INF_BROWSER_OPENING: break; case INF_BROWSER_OPEN: if(!create_chat_document(browser)) subscribe_chat(browser); break; default: g_assert_not_reached(); break; } } void Gobby::BrowserCommands::subscribe_chat(InfBrowser* browser) { if(INFC_IS_BROWSER(browser)) { std::auto_ptr info(new RequestInfo( *this, INF_BROWSER(browser), NULL, m_status_bar)); InfRequest* request = INF_REQUEST( infc_browser_subscribe_chat( INFC_BROWSER(browser), RequestInfo::on_chat_finished_static, info.get())); if(request != NULL) { info->set_request(request); g_assert(m_request_map.find(request) == m_request_map.end()); m_request_map[request] = info.release(); } } else if(INFD_IS_DIRECTORY(browser)) { infd_directory_enable_chat(INFD_DIRECTORY(browser), TRUE); create_chat_document(browser); } } bool Gobby::BrowserCommands::create_chat_document(InfBrowser* browser) { // Get the chat session from the browser InfSessionProxy* proxy = NULL; if(INFC_IS_BROWSER(browser)) { proxy = INF_SESSION_PROXY( infc_browser_get_chat_session(INFC_BROWSER(browser))); } else if(INFD_IS_DIRECTORY(browser)) { proxy = INF_SESSION_PROXY( infd_directory_get_chat_session( INFD_DIRECTORY(browser))); } // Chat session not available if(!proxy) return false; // First, check whether there is already a document for this // chat session. If there is, then don't create another one. InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); SessionView* view = m_folder_manager.get_chat_folder().lookup_document(session); g_object_unref(session); g_assert(view == NULL); // Can it happen? if(view) return true; // Document exists already if(INFC_IS_BROWSER(browser)) { // For clients, just add the document m_folder_manager.add_document( browser, NULL, proxy, NULL); return true; } else if(INFD_IS_DIRECTORY(browser)) { // For our local chat, only show it if there is at least // one remote user, otherwise wait until users show up. BrowserMap::iterator iter = m_browser_map.find(browser); g_assert(iter != m_browser_map.end()); iter->second->set_pending_chat(proxy); return true; } } void Gobby::BrowserCommands::on_connect(const Glib::ustring& hostname) { m_operations.subscribe_path(hostname); } void Gobby::BrowserCommands::on_activate(InfBrowser* browser, InfBrowserIter* iter) { InfSessionProxy* proxy = inf_browser_get_session(browser, iter); if(proxy != NULL) { InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); SessionView* view = m_folder_manager.lookup_document(session); g_object_unref(session); if(view != NULL) { m_folder_manager.switch_to_document(*view); } else { m_folder_manager.add_document(browser, iter, proxy, NULL); } } else { InfRequest* request = inf_browser_get_pending_request( browser, iter, "subscribe-session"); // If there is already a request don't re-request if(request == NULL) { std::auto_ptr info(new RequestInfo( *this, browser, iter, m_status_bar)); request = INF_REQUEST( inf_browser_subscribe( browser, iter, RequestInfo::on_node_finished_static, info.get())); if(request != NULL) { info->set_request(request); g_assert(m_request_map.find(request) == m_request_map.end()); m_request_map[request] = info.release(); } } } } void Gobby::BrowserCommands::on_finished(InfRequest* request, InfBrowser* browser, const InfBrowserIter* iter, const GError* error) { RequestMap::iterator map_iter = m_request_map.find(request); if(map_iter != m_request_map.end()) { delete map_iter->second; m_request_map.erase(map_iter); } if(error != NULL) { m_status_bar.add_error_message( _("Subscription failed"), error->message); } else if(iter != NULL) { InfSessionProxy* proxy = inf_browser_get_session(browser, iter); g_assert(proxy != NULL); m_folder_manager.add_document(browser, iter, proxy, NULL); } else { // For InfdDirectory we do not make a request for subscribing // to the chat. const bool created = create_chat_document(browser); g_assert(created); // Must work now } } gobby-0.5.0/code/commands/file-tasks/0000755000175000017500000000000012376162132014377 500000000000000gobby-0.5.0/code/commands/file-tasks/task-new.hpp0000644000175000017500000000227612370427450016571 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_NEW_HPP_ #define _GOBBY_FILE_TASK_NEW_HPP_ #include "commands/file-commands.hpp" namespace Gobby { class TaskNew: public FileCommands::Task { public: TaskNew(FileCommands& file_commands); virtual ~TaskNew(); virtual void run(); protected: void on_response(int response_id); }; } // namespcae Gobby #endif // _GOBBY_FILE_TASK_NEW_HPP_ gobby-0.5.0/code/commands/file-tasks/task-export-html.hpp0000644000175000017500000000254212370427450020257 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_EXPORT_HTML_HPP_ #define _GOBBY_FILE_TASK_EXPORT_HTML_HPP_ #include "commands/file-commands.hpp" namespace Gobby { class TaskExportHtml: public FileCommands::Task { private: FileChooser::Dialog m_file_dialog; TextSessionView* m_view; bool m_running; public: TaskExportHtml(FileCommands& file_commands, TextSessionView& view); virtual void run(); void on_response(int response_id); void on_document_removed(SessionView& view); }; } // namespace Gobby #endif // _GOBBY_FILE_TASK_EXPORT_HTML_HPP_ gobby-0.5.0/code/commands/file-tasks/Makefile.in0000644000175000017500000004162012376162111016364 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = code/commands/file-tasks DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ libgobby_file_tasks_a_AR = $(AR) $(ARFLAGS) libgobby_file_tasks_a_LIBADD = am_libgobby_file_tasks_a_OBJECTS = task-export-html.$(OBJEXT) \ task-new.$(OBJEXT) task-open.$(OBJEXT) \ task-open-file.$(OBJEXT) task-open-location.$(OBJEXT) \ task-open-multiple.$(OBJEXT) task-save.$(OBJEXT) \ task-save-all.$(OBJEXT) libgobby_file_tasks_a_OBJECTS = $(am_libgobby_file_tasks_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/code depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libgobby_file_tasks_a_SOURCES) DIST_SOURCES = $(libgobby_file_tasks_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) 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@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ noinst_LIBRARIES = libgobby-file-tasks.a libgobby_file_tasks_a_SOURCES = \ task-export-html.cpp \ task-new.cpp \ task-open.cpp \ task-open-file.cpp \ task-open-location.cpp \ task-open-multiple.cpp \ task-save.cpp \ task-save-all.cpp noinst_HEADERS = \ task-export-html.hpp \ task-new.hpp \ task-open.hpp \ task-open-file.hpp \ task-open-location.hpp \ task-open-multiple.hpp \ task-save.hpp \ task-save-all.hpp appicondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/gobby-0.5 AM_CPPFLAGS = $(gobby_CFLAGS) $(unique_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code all: all-am .SUFFIXES: .SUFFIXES: .cpp .o .obj $(srcdir)/Makefile.in: $(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) --foreign code/commands/file-tasks/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign code/commands/file-tasks/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(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) libgobby-file-tasks.a: $(libgobby_file_tasks_a_OBJECTS) $(libgobby_file_tasks_a_DEPENDENCIES) $(EXTRA_libgobby_file_tasks_a_DEPENDENCIES) $(AM_V_at)-rm -f libgobby-file-tasks.a $(AM_V_AR)$(libgobby_file_tasks_a_AR) libgobby-file-tasks.a $(libgobby_file_tasks_a_OBJECTS) $(libgobby_file_tasks_a_LIBADD) $(AM_V_at)$(RANLIB) libgobby-file-tasks.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task-export-html.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task-new.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task-open-file.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task-open-location.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task-open-multiple.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task-open.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task-save-all.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task-save.Po@am__quote@ .cpp.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cpp.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` 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) $(HEADERS) 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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-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 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-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic 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: gobby-0.5.0/code/commands/file-tasks/task-open-file.hpp0000644000175000017500000000264612370427450017657 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_OPEN_FILE_HPP_ #define _GOBBY_FILE_TASK_OPEN_FILE_HPP_ #include "commands/file-commands.hpp" #include "commands/file-tasks/task-open.hpp" #include "commands/file-tasks/task-open-multiple.hpp" namespace Gobby { class TaskOpenFile: public FileCommands::Task { public: TaskOpenFile(FileCommands& file_commands); virtual void run(); private: void on_file_response(int response_id); FileChooser::Dialog m_file_dialog; std::auto_ptr m_open_task; std::auto_ptr m_open_taskm; }; } // namespace Gobby #endif // _GOBBY_FILE_TASK_OPEN_FILE_HPP_ gobby-0.5.0/code/commands/file-tasks/task-open-location.cpp0000644000175000017500000000344512370427450020541 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/file-tasks/task-open-location.hpp" #include Gobby::TaskOpenLocation::TaskOpenLocation(FileCommands& file_commands): Task(file_commands), m_location_dialog(get_parent()) { } void Gobby::TaskOpenLocation::run() { m_location_dialog.signal_response().connect( sigc::mem_fun( *this, &TaskOpenLocation::on_response)); m_location_dialog.add_button(Gtk::Stock::CLOSE, Gtk::RESPONSE_CLOSE); m_location_dialog.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_ACCEPT); m_location_dialog.present(); } void Gobby::TaskOpenLocation::on_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { std::string uri = m_location_dialog.get_uri(); Glib::RefPtr file = Gio::File::create_for_uri(uri); m_location_dialog.hide(); m_open_task.reset(new TaskOpen(m_file_commands, file)); m_open_task->signal_finished().connect( sigc::mem_fun(*this, &TaskOpenLocation::finish)); m_open_task->run(); } else { finish(); } } gobby-0.5.0/code/commands/file-tasks/task-open.cpp0000644000175000017500000000560212370427450016730 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/file-tasks/task-open.hpp" #include "util/i18n.hpp" Gobby::TaskOpen::TaskOpen(FileCommands& file_commands, const Glib::RefPtr& file): Task(file_commands), m_file(file) { } Gobby::TaskOpen::~TaskOpen() { if(m_handle != get_status_bar().invalid_handle()) get_status_bar().remove_message(m_handle); get_document_location_dialog().hide(); } void Gobby::TaskOpen::run() { try { // TODO: Show DocumentLocationDialog with a // default name as long as the query is // running. m_file->query_info_async( sigc::mem_fun(*this, &TaskOpen::on_query_info), G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME); m_handle = get_status_bar().add_info_message( Glib::ustring::compose( _("Querying \"%1\"..."), m_file->get_uri())); } catch(const Gio::Error& ex) { error(ex.what()); } } void Gobby::TaskOpen::on_query_info( const Glib::RefPtr& result) { get_status_bar().remove_message(m_handle); m_handle = get_status_bar().invalid_handle(); DocumentLocationDialog& dialog = get_document_location_dialog(); dialog.signal_response().connect(sigc::mem_fun( *this, &TaskOpen::on_location_response)); try { Glib::RefPtr info = m_file->query_info_finish(result); dialog.set_document_name(info->get_display_name()); dialog.set_single_document_mode(); dialog.present(); } catch(const Gio::Error& ex) { error(ex.what()); } } void Gobby::TaskOpen::on_location_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { DocumentLocationDialog& dialog = get_document_location_dialog(); InfBrowserIter iter; InfBrowser* browser = dialog.get_selected_directory(&iter); g_assert(browser != NULL); get_operations().create_document( browser, &iter, dialog.get_document_name(), get_preferences(), m_file->get_uri(), NULL); } finish(); } void Gobby::TaskOpen::error(const Glib::ustring& message) { get_status_bar().add_error_message( Glib::ustring::compose( _("Failed to open document \"%1\""), m_file->get_uri()), message); finish(); } gobby-0.5.0/code/commands/file-tasks/task-save.hpp0000644000175000017500000000250112370427450016725 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_SAVE_HPP_ #define _GOBBY_FILE_TASK_SAVE_HPP_ #include "commands/file-commands.hpp" namespace Gobby { class TaskSave: public FileCommands::Task { private: FileChooser::Dialog m_file_dialog; TextSessionView* m_view; bool m_running; public: TaskSave(FileCommands& file_commands, TextSessionView& view); virtual void run(); void on_response(int response_id); void on_document_removed(SessionView& view); }; } // namespace Gobby #endif // _GOBBY_FILE_TASK_SAVE_HPP_ gobby-0.5.0/code/commands/file-tasks/task-open-location.hpp0000644000175000017500000000257712370427450020553 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_OPEN_LOCATION_HPP_ #define _GOBBY_FILE_TASK_OPEN_LOCATION_HPP_ #include "commands/file-commands.hpp" #include "commands/file-tasks/task-open.hpp" #include "dialogs/open-location-dialog.hpp" namespace Gobby { class TaskOpenLocation: public FileCommands::Task { public: TaskOpenLocation(FileCommands& file_commands); virtual void run(); private: void on_response(int response_id); OpenLocationDialog m_location_dialog; std::auto_ptr m_open_task; }; } // namespace Gobby #endif // _GOBBY_FILE_TASK_OPEN_LOCATION_HPP_ gobby-0.5.0/code/commands/file-tasks/task-save-all.hpp0000644000175000017500000000264612370427450017505 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_SAVE_ALL_HPP_ #define _GOBBY_FILE_TASK_SAVE_ALL_HPP_ #include "commands/file-commands.hpp" #include "commands/file-tasks/task-save.hpp" namespace Gobby { class TaskSaveAll: public Gobby::FileCommands::Task { public: TaskSaveAll(FileCommands& file_commands); virtual void run(); private: void on_document_removed(SessionView& view); void on_finished(); void process_current(); std::list m_views; std::list::iterator m_current; std::auto_ptr m_task; }; } // namespace Gobby #endif // _GOBBY_FILE_TASK_SAVE_ALL_HPP_ gobby-0.5.0/code/commands/file-tasks/task-export-html.cpp0000644000175000017500000000431012370427450020245 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ // TODO: Merge with TaskSave, or share code in a common base class #include "commands/file-tasks/task-export-html.hpp" #include "util/i18n.hpp" Gobby::TaskExportHtml::TaskExportHtml(FileCommands& file_commands, TextSessionView& view): Task(file_commands), m_file_dialog(get_file_chooser(), get_parent(), Glib::ustring::compose( _("Choose a location to export document \"%1\" to"), view.get_title()), Gtk::FILE_CHOOSER_ACTION_SAVE), m_view(&view), m_running(false) { get_folder().signal_document_removed().connect( sigc::mem_fun(*this, &TaskExportHtml::on_document_removed)); } void Gobby::TaskExportHtml::run() { // m_document will be set to NULL if it has been removed before run // was called. if(!m_view) { finish(); return; } m_running = true; m_file_dialog.signal_response().connect(sigc::mem_fun( *this, &TaskExportHtml::on_response)); m_file_dialog.set_current_name(m_view->get_title() + ".xhtml"); m_file_dialog.present(); } void Gobby::TaskExportHtml::on_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { get_operations().export_html( *m_view, m_file_dialog.get_uri()); } finish(); } void Gobby::TaskExportHtml::on_document_removed(SessionView& view) { // The document we are about to save was removed. if(m_view == &view) { if(m_running) finish(); else m_view = NULL; } } gobby-0.5.0/code/commands/file-tasks/Makefile.am0000644000175000017500000000114012370042071016340 00000000000000noinst_LIBRARIES = libgobby-file-tasks.a libgobby_file_tasks_a_SOURCES = \ task-export-html.cpp \ task-new.cpp \ task-open.cpp \ task-open-file.cpp \ task-open-location.cpp \ task-open-multiple.cpp \ task-save.cpp \ task-save-all.cpp noinst_HEADERS = \ task-export-html.hpp \ task-new.hpp \ task-open.hpp \ task-open-file.hpp \ task-open-location.hpp \ task-open-multiple.hpp \ task-save.hpp \ task-save-all.hpp appicondir = $(datadir)/pixmaps pixmapdir = $(datadir)/pixmaps/gobby-0.5 AM_CPPFLAGS = $(gobby_CFLAGS) $(unique_CFLAGS) $(infinote_CFLAGS) \ -I$(top_srcdir)/code gobby-0.5.0/code/commands/file-tasks/task-open-multiple.hpp0000644000175000017500000000271612370427450020571 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_OPEN_MULTIPLE_HPP_ #define _GOBBY_FILE_TASK_OPEN_MULTIPLE_HPP_ #include "commands/file-commands.hpp" #include "operations/operation-open-multiple.hpp" #include #include namespace Gobby { class TaskOpenMultiple: public FileCommands::Task { public: TaskOpenMultiple(FileCommands& file_commands); virtual ~TaskOpenMultiple(); virtual void run(); void add_file(const Glib::ustring& uri); private: void on_location_response(int response_id); typedef OperationOpenMultiple::uri_list uri_list; uri_list m_uris; }; } // namespace Gobby #endif // _GOBBY_FILE_TASK_OPEN_MULTIPLE_HPP_ gobby-0.5.0/code/commands/file-tasks/task-open-multiple.cpp0000644000175000017500000000362612370427450020565 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/file-tasks/task-open-multiple.hpp" #include "operations/operation-open-multiple.hpp" Gobby::TaskOpenMultiple::TaskOpenMultiple(FileCommands& file_commands): Task(file_commands) { } Gobby::TaskOpenMultiple::~TaskOpenMultiple() { get_document_location_dialog().hide(); } void Gobby::TaskOpenMultiple::run() { DocumentLocationDialog& dialog = get_document_location_dialog(); dialog.signal_response().connect(sigc::mem_fun( *this, &TaskOpenMultiple::on_location_response)); dialog.set_multiple_document_mode(); dialog.present(); } void Gobby::TaskOpenMultiple::add_file(const Glib::ustring& uri) { m_uris.push_back(uri); } void Gobby::TaskOpenMultiple::on_location_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { DocumentLocationDialog& dialog = get_document_location_dialog(); InfBrowserIter iter; InfBrowser* browser = dialog.get_selected_directory(&iter); g_assert(browser != NULL); OperationOpenMultiple* operation = get_operations().create_documents( browser, &iter, get_preferences(), m_uris); } finish(); } gobby-0.5.0/code/commands/file-tasks/task-open-file.cpp0000644000175000017500000000426712370427450017653 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/file-tasks/task-open-file.hpp" #include "util/i18n.hpp" Gobby::TaskOpenFile::TaskOpenFile(FileCommands& file_commands): Task(file_commands), m_file_dialog(get_file_chooser(), get_parent(), _("Choose a text file to open"), Gtk::FILE_CHOOSER_ACTION_OPEN) { m_file_dialog.set_select_multiple(true); } void Gobby::TaskOpenFile::run() { m_file_dialog.signal_response().connect(sigc::mem_fun( *this, &TaskOpenFile::on_file_response)); m_file_dialog.present(); } void Gobby::TaskOpenFile::on_file_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { m_file_dialog.hide(); Glib::SListHandle uris = m_file_dialog.get_uris(); g_assert(uris.size() >= 1); if (uris.size() == 1) { Glib::RefPtr file = Gio::File::create_for_uri(*uris.begin()); m_open_task.reset(new TaskOpen(m_file_commands, file)); m_open_task->signal_finished().connect( sigc::mem_fun(*this, &TaskOpenFile::finish)); m_open_task->run(); } else { TaskOpenMultiple *task = new TaskOpenMultiple(m_file_commands); for(Glib::SListHandle::iterator i = uris.begin(); i != uris.end(); ++i) task->add_file(*i); m_open_taskm.reset(task); m_open_taskm->signal_finished().connect( sigc::mem_fun(*this, &TaskOpenFile::finish)); m_open_taskm->run(); } } else { finish(); } } gobby-0.5.0/code/commands/file-tasks/task-save-all.cpp0000644000175000017500000000530212370427450017470 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ // TODO: This should not be a task because the asynchronous IO operations // should not be interrupted by tasks like "save as". // The should-not-abort part should be an operation. #include "commands/file-tasks/task-save-all.hpp" Gobby::TaskSaveAll::TaskSaveAll(FileCommands& file_commands): Task(file_commands) { } void Gobby::TaskSaveAll::run() { const unsigned int n_pages = get_folder().get_n_pages(); for(unsigned int i = 0; i < n_pages; ++i) { SessionView& view = get_folder().get_document(i); TextSessionView* text_view = dynamic_cast(&view); if(text_view) m_views.push_back(text_view); } get_folder().signal_document_removed().connect( sigc::mem_fun(*this, &TaskSaveAll::on_document_removed)); m_current = m_views.begin(); process_current(); } void Gobby::TaskSaveAll::on_document_removed(SessionView& view) { std::list::iterator iter = std::find( m_views.begin(), m_views.end(), &view); if(iter == m_current) { m_current = m_views.erase(m_current); // Go on with next process_current(); } if(iter != m_views.end()) m_views.erase(iter); } void Gobby::TaskSaveAll::on_finished() { m_current = m_views.erase(m_current); process_current(); } void Gobby::TaskSaveAll::process_current() { m_task.reset(NULL); if(m_current == m_views.end()) { finish(); } else { TextSessionView& view = **m_current; const DocumentInfoStorage::Info* info = get_document_info_storage().get_info( view.get_info_storage_key()); if(info != NULL && !info->uri.empty()) { get_operations().save_document( view, info->uri, info->encoding, info->eol_style); m_current = m_views.erase(m_current); process_current(); } else { m_task.reset(new TaskSave(m_file_commands, view)); m_task->signal_finished().connect(sigc::mem_fun( *this, &TaskSaveAll::on_finished)); m_task->run(); } } } gobby-0.5.0/code/commands/file-tasks/task-new.cpp0000644000175000017500000000334712370427450016564 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/file-tasks/task-new.hpp" #include "util/i18n.hpp" Gobby::TaskNew::TaskNew(FileCommands& file_commands): Task(file_commands) { } Gobby::TaskNew::~TaskNew() { get_document_location_dialog().hide(); } void Gobby::TaskNew::run() { DocumentLocationDialog& dialog = get_document_location_dialog(); dialog.signal_response().connect( sigc::mem_fun(*this, &TaskNew::on_response)); dialog.set_document_name(_("New Document")); dialog.set_single_document_mode(); dialog.present(); } void Gobby::TaskNew::on_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { DocumentLocationDialog& dialog = get_document_location_dialog(); InfBrowserIter iter; InfBrowser* browser = dialog.get_selected_directory(&iter); g_assert(browser != NULL); get_operations().create_document(browser, &iter, dialog.get_document_name()); } finish(); } gobby-0.5.0/code/commands/file-tasks/task-open.hpp0000644000175000017500000000271012370427450016732 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FILE_TASK_OPEN_HPP_ #define _GOBBY_FILE_TASK_OPEN_HPP_ #include "commands/file-commands.hpp" #include namespace Gobby { class TaskOpen: public FileCommands::Task { public: TaskOpen(FileCommands& file_commands, const Glib::RefPtr& file); virtual ~TaskOpen(); virtual void run(); private: void on_query_info(const Glib::RefPtr& result); void on_location_response(int response_id); void error(const Glib::ustring& message); StatusBar::MessageHandle m_handle; Glib::RefPtr m_file; }; } // namespace Gobby #endif // _GOBBY_FILE_TASK_OPEN_HPP_ gobby-0.5.0/code/commands/file-tasks/task-save.cpp0000644000175000017500000000511512370427450016724 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/file-tasks/task-save.hpp" #include "util/i18n.hpp" Gobby::TaskSave::TaskSave(FileCommands& file_commands, TextSessionView& view): Task(file_commands), m_file_dialog(get_file_chooser(), get_parent(), Glib::ustring::compose( _("Choose a location to save document \"%1\" to"), view.get_title()), Gtk::FILE_CHOOSER_ACTION_SAVE), m_view(&view), m_running(false) { get_folder().signal_document_removed().connect( sigc::mem_fun( *this, &TaskSave::on_document_removed)); } void Gobby::TaskSave::run() { // m_view will be set to NULL if it has been removed before run // was called. if(!m_view) { finish(); return; } m_running = true; m_file_dialog.signal_response().connect(sigc::mem_fun( *this, &TaskSave::on_response)); const DocumentInfoStorage::Info* info = get_document_info_storage().get_info( m_view->get_info_storage_key()); if(info != NULL && !info->uri.empty()) m_file_dialog.set_uri(info->uri); else m_file_dialog.set_current_name(m_view->get_title()); m_file_dialog.present(); } void Gobby::TaskSave::on_response(int response_id) { if(response_id == Gtk::RESPONSE_ACCEPT) { const std::string& info_storage_key = m_view->get_info_storage_key(); const DocumentInfoStorage::Info* info = get_document_info_storage().get_info( info_storage_key); // TODO: Get encoding from file dialog // TODO: Default to CRLF on Windows get_operations().save_document( *m_view, m_file_dialog.get_uri(), info ? info->encoding : "UTF-8", info ? info->eol_style : DocumentInfoStorage::EOL_LF); } finish(); } void Gobby::TaskSave::on_document_removed(SessionView& view) { // The document we are about to save was removed. if(m_view == &view) { if(m_running) finish(); else m_view = NULL; } } gobby-0.5.0/code/commands/folder-commands.hpp0000644000175000017500000000270512370427450016045 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_FOLDER_COMMANDS_HPP_ #define _GOBBY_FOLDER_COMMANDS_HPP_ #include "core/folder.hpp" #include namespace Gobby { class FolderCommands: public sigc::trackable { public: FolderCommands(const Folder& folder); ~FolderCommands(); protected: void on_document_added(SessionView& view); void on_document_removed(SessionView& view); void on_document_changed(SessionView* view); const Folder& m_folder; SessionView* m_current_view; class DocInfo; typedef std::map DocumentMap; DocumentMap m_doc_map; class TextDocInfo; }; } #endif // _GOBBY_FOLDER_COMMANDS_HPP_ gobby-0.5.0/code/commands/auth-commands.hpp0000644000175000017500000001022312370427450015525 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef _GOBBY_AUTH_COMMANDS_HPP_ #define _GOBBY_AUTH_COMMANDS_HPP_ #include "dialogs/password-dialog.hpp" #include "core/browser.hpp" #include "core/statusbar.hpp" #include "core/preferences.hpp" #include #include namespace Gobby { class AuthCommands: public sigc::trackable { public: AuthCommands(Gtk::Window& parent, Browser& browser, StatusBar& statusbar, ConnectionManager& connection_manager, const Preferences& preferences); ~AuthCommands(); InfSaslContext* get_sasl_context() { return m_sasl_context; } protected: static void sasl_callback_static(InfSaslContextSession* session, Gsasl_property prop, gpointer session_data, gpointer user_data) { AuthCommands* auth = static_cast(user_data); auth->sasl_callback( session, INF_XMPP_CONNECTION(session_data), prop); } static void set_browser_callback_static(InfGtkBrowserModel*, GtkTreePath*, GtkTreeIter*, InfBrowser* old_browser, InfBrowser* new_browser, gpointer user_data) { AuthCommands* auth = static_cast(user_data); auth->set_browser_callback(old_browser, new_browser); } static void on_notify_status_static(GObject* connection_obj, GParamSpec*, gpointer user_data) { AuthCommands* auth = static_cast(user_data); auth->on_notify_status(INF_XMPP_CONNECTION(connection_obj)); } static void browser_error_callback_static(InfcBrowser* browser, gpointer error_ptr, gpointer user_data) { AuthCommands* auth = static_cast(user_data); GError* error = static_cast(error_ptr); auth->browser_error_callback(browser, error); } void set_sasl_error(InfXmppConnection* connection, const gchar* message); void sasl_callback(InfSaslContextSession* session, InfXmppConnection* xmpp, Gsasl_property prop); void set_browser_callback(InfBrowser* old_browser, InfBrowser* new_browser); void browser_error_callback(InfcBrowser* browser, GError* error); void handle_error_detail(InfXmppConnection* xmpp, const GError* detail_error, Glib::ustring& old_password, Glib::ustring& last_password); struct RetryInfo { unsigned int retries; Glib::ustring last_password; gulong handle; PasswordDialog* password_dialog; }; typedef std::map RetryMap; RetryMap::iterator insert_retry_info(InfXmppConnection* xmpp); void on_notify_status(InfXmppConnection* connection); void on_response(int response_id, InfSaslContextSession* session, InfXmppConnection* xmpp); Gtk::Window& m_parent; Browser& m_browser; StatusBar& m_statusbar; ConnectionManager& m_connection_manager; const Preferences& m_preferences; InfSaslContext* m_sasl_context; RetryMap m_retries; }; } #endif // _GOBBY_AUTH_COMMANDS_HPP_ gobby-0.5.0/code/commands/view-commands.cpp0000644000175000017500000003526012370466747015555 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/view-commands.hpp" #include "util/i18n.hpp" #include "util/gtk-compat.hpp" #include #include class Gobby::ViewCommands::Fullscreen { public: class Preserve: public sigc::trackable { public: Preserve(const Glib::RefPtr& action); ~Preserve(); private: void on_toggled(); const Glib::RefPtr& m_action; bool m_value; }; Fullscreen(ViewCommands& commands); ~Fullscreen(); private: ViewCommands& m_commands; Preserve m_preserve_toolbar; Preserve m_preserve_browser; Preserve m_preserve_chat; Preserve m_preserve_document_userlist; Preserve m_preserve_chat_userlist; }; Gobby::ViewCommands::Fullscreen::Preserve::Preserve( const Glib::RefPtr& action) : m_action(action) { // De-activate all the clutter, but remember their state before // we went fullscreen, so that we can restore when we leave // fullscreen again. m_value = action->get_active(); action->set_active(false); action->signal_toggled().connect(sigc::mem_fun( *this, &Preserve::on_toggled)); } Gobby::ViewCommands::Fullscreen::Preserve::~Preserve() { m_action->set_active(m_value); } void Gobby::ViewCommands::Fullscreen::Preserve::on_toggled() { // Update value; if one of the options is toggled we keep the // toggled version when fullscreen is left. m_value = m_action->get_active(); } Gobby::ViewCommands::Fullscreen::Fullscreen(ViewCommands& commands): m_commands(commands), m_preserve_toolbar(commands.m_header.action_view_toolbar), m_preserve_browser(commands.m_header.action_view_browser), m_preserve_chat(commands.m_header.action_view_chat), m_preserve_document_userlist( commands.m_header.action_view_document_userlist), m_preserve_chat_userlist( commands.m_header.action_view_chat_userlist) { m_commands.m_main_window.fullscreen(); } Gobby::ViewCommands::Fullscreen::~Fullscreen() { m_commands.m_main_window.unfullscreen(); } Gobby::ViewCommands::ViewCommands(Gtk::Window& main_window, Header& header, const Folder& text_folder, ClosableFrame& chat_frame, const Folder& chat_folder, Preferences& preferences): m_main_window(main_window), m_header(header), m_text_folder(text_folder), m_chat_frame(chat_frame), m_chat_folder(chat_folder), m_preferences(preferences), m_current_view(NULL) { m_header.action_view_hide_user_colors->signal_activate().connect( sigc::mem_fun(*this, &ViewCommands::on_hide_user_colors)); m_header.action_view_fullscreen->signal_toggled().connect( sigc::mem_fun(*this, &ViewCommands::on_fullscreen_toggled)); m_header.action_view_zoom_in->signal_activate().connect( sigc::mem_fun(*this, &ViewCommands::on_zoom_in)); m_header.action_view_zoom_out->signal_activate().connect( sigc::mem_fun(*this, &ViewCommands::on_zoom_out)); m_menu_view_toolbar_connection = m_header.action_view_toolbar->signal_toggled().connect( sigc::mem_fun( *this, &ViewCommands::on_menu_toolbar_toggled)); m_menu_view_statusbar_connection = m_header.action_view_statusbar->signal_toggled().connect( sigc::mem_fun( *this, &ViewCommands::on_menu_statusbar_toggled)); m_menu_view_browser_connection = m_header.action_view_browser->signal_toggled().connect( sigc::mem_fun( *this, &ViewCommands::on_menu_browser_toggled)); m_menu_view_chat_connection = m_header.action_view_chat->signal_toggled().connect( sigc::mem_fun( *this, &ViewCommands::on_menu_chat_toggled)); m_menu_view_document_userlist_connection = m_header.action_view_document_userlist-> signal_toggled().connect(sigc::mem_fun( *this, &ViewCommands:: on_menu_document_userlist_toggled)); m_menu_view_chat_userlist_connection = m_header.action_view_chat_userlist->signal_toggled().connect( sigc::mem_fun( *this, &ViewCommands:: on_menu_chat_userlist_toggled)); // Shortcut: Preferences::Appearance& appearance = preferences.appearance; m_pref_view_toolbar_connection = appearance.show_toolbar.signal_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_pref_toolbar_changed)); m_pref_view_statusbar_connection = appearance.show_statusbar.signal_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_pref_statusbar_changed)); m_pref_view_browser_connection = appearance.show_browser.signal_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_pref_browser_changed)); m_pref_view_chat_connection = appearance.show_chat.signal_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_pref_chat_changed)); m_pref_view_document_userlist_connection = appearance.show_document_userlist.signal_changed().connect( sigc::mem_fun( *this, &ViewCommands:: on_pref_document_userlist_changed)); m_pref_view_chat_userlist_connection = appearance.show_chat_userlist.signal_changed().connect( sigc::mem_fun( *this, &ViewCommands:: on_pref_chat_userlist_changed)); m_text_folder.signal_document_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_text_document_changed)); m_chat_folder.signal_document_added().connect( sigc::mem_fun( *this, &ViewCommands::on_chat_document_added)); m_chat_folder.signal_document_removed().connect( sigc::mem_fun( *this, &ViewCommands::on_chat_document_removed)); m_chat_folder.signal_document_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_chat_document_changed)); m_menu_language_changed_connection = m_header.action_view_highlight_none->signal_changed().connect( sigc::mem_fun( *this, &ViewCommands::on_menu_language_changed)); m_chat_frame.signal_show().connect( sigc::mem_fun(*this, &ViewCommands::on_chat_show)); m_chat_frame.signal_hide().connect( sigc::mem_fun(*this, &ViewCommands::on_chat_hide)); // Chat View by default not sensitive, becomes sensitive if a server // connection is made. m_header.action_view_chat->set_sensitive(false); m_chat_frame.set_allow_visible(false); // Setup initial sensitivity: on_text_document_changed(m_text_folder.get_current_document()); on_chat_document_changed(m_chat_folder.get_current_document()); } Gobby::ViewCommands::~ViewCommands() { // Disconnect handlers from current document: on_text_document_changed(NULL); on_chat_document_changed(NULL); } void Gobby::ViewCommands::on_text_document_changed(SessionView* view) { if(m_current_view != NULL) m_document_language_changed_connection.disconnect(); m_current_view = dynamic_cast(view); if(m_current_view != NULL) { m_header.action_view_hide_user_colors->set_sensitive(true); //m_header.action_view_fullscreen->set_sensitive(true); m_header.action_view_zoom_in->set_sensitive(true); m_header.action_view_zoom_out->set_sensitive(true); m_header.action_view_highlight_mode->set_sensitive(true); m_header.action_view_document_userlist->set_sensitive(true); m_document_language_changed_connection = m_current_view->signal_language_changed().connect( sigc::mem_fun( *this, &ViewCommands:: on_doc_language_changed)); } else { m_header.action_view_hide_user_colors->set_sensitive(false); //m_header.action_view_fullscreen->set_sensitive(false); m_header.action_view_zoom_in->set_sensitive(false); m_header.action_view_zoom_out->set_sensitive(false); m_menu_language_changed_connection.block(); m_header.action_view_highlight_mode->set_sensitive(false); m_header.action_view_highlight_none->set_active(true); m_menu_language_changed_connection.unblock(); m_header.action_view_document_userlist->set_sensitive(false); } on_doc_language_changed( m_current_view ? m_current_view->get_language() : NULL); } void Gobby::ViewCommands::on_chat_document_added(SessionView& view) { // Allow the chat frame to be visible if the option allows it m_chat_frame.set_allow_visible(true); m_header.action_view_chat->set_sensitive(true); } void Gobby::ViewCommands::on_chat_document_removed(SessionView& view) { if(m_chat_folder.get_n_pages() == 1) { // This is the last document, and it is about to be removed. m_header.action_view_chat->set_sensitive(false); // Hide the chat frame independent of the option m_chat_frame.set_allow_visible(false); } } void Gobby::ViewCommands::on_chat_document_changed(SessionView* view) { if(view != NULL) { if(GtkCompat::is_visible(m_chat_frame)) { m_header.action_view_chat_userlist->set_sensitive( true); } } else { m_header.action_view_chat_userlist->set_sensitive(false); } } void Gobby::ViewCommands::on_chat_show() { SessionView* view = m_chat_folder.get_current_document(); if(view != NULL) m_header.action_view_chat_userlist->set_sensitive(true); } void Gobby::ViewCommands::on_chat_hide() { m_header.action_view_chat_userlist->set_sensitive(false); } void Gobby::ViewCommands::on_zoom_in() { Pango::FontDescription desc = m_preferences.appearance.font; desc.set_size(desc.get_size() * PANGO_SCALE_LARGE); m_preferences.appearance.font = desc; } void Gobby::ViewCommands::on_zoom_out() { Pango::FontDescription desc = m_preferences.appearance.font; desc.set_size(desc.get_size() / PANGO_SCALE_LARGE); m_preferences.appearance.font = desc; } void Gobby::ViewCommands::on_hide_user_colors() { SessionView* view = m_text_folder.get_current_document(); TextSessionView* text_view = dynamic_cast(view); g_assert(text_view != NULL); InfSession* session = INF_SESSION(text_view->get_session()); GtkTextBuffer* textbuffer = GTK_TEXT_BUFFER(text_view->get_text_buffer()); InfBuffer* buffer = inf_session_get_buffer(session); InfTextGtkBuffer* infbuffer = INF_TEXT_GTK_BUFFER(buffer); GtkTextIter start, end; gtk_text_buffer_get_start_iter(textbuffer, &start); gtk_text_buffer_get_end_iter(textbuffer, &end); inf_text_gtk_buffer_show_user_colors(infbuffer, FALSE, &start, &end); } void Gobby::ViewCommands::on_fullscreen_toggled() { if(m_header.action_view_fullscreen->get_active()) { if(!m_fullscreen.get()) m_fullscreen.reset(new Fullscreen(*this)); } else { m_fullscreen.reset(NULL); } /* bool browser_was_open = m_header.action_ m_main_window.fullscreen(); else m_main_window.unfullscreen();*/ } void Gobby::ViewCommands::on_menu_toolbar_toggled() { m_pref_view_toolbar_connection.block(); m_preferences.appearance.show_toolbar = m_header.action_view_toolbar->get_active(); m_pref_view_toolbar_connection.unblock(); } void Gobby::ViewCommands::on_menu_statusbar_toggled() { m_pref_view_statusbar_connection.block(); m_preferences.appearance.show_statusbar = m_header.action_view_statusbar->get_active(); m_pref_view_statusbar_connection.unblock(); } void Gobby::ViewCommands::on_menu_browser_toggled() { m_pref_view_browser_connection.block(); m_preferences.appearance.show_browser = m_header.action_view_browser->get_active(); m_pref_view_browser_connection.unblock(); } void Gobby::ViewCommands::on_menu_chat_toggled() { m_pref_view_chat_connection.block(); m_preferences.appearance.show_chat = m_header.action_view_chat->get_active(); m_pref_view_chat_connection.unblock(); } void Gobby::ViewCommands::on_menu_document_userlist_toggled() { m_pref_view_document_userlist_connection.block(); m_preferences.appearance.show_document_userlist = m_header.action_view_document_userlist->get_active(); m_pref_view_document_userlist_connection.unblock(); } void Gobby::ViewCommands::on_menu_chat_userlist_toggled() { m_pref_view_chat_userlist_connection.block(); m_preferences.appearance.show_chat_userlist = m_header.action_view_chat_userlist->get_active(); m_pref_view_chat_userlist_connection.unblock(); } void Gobby::ViewCommands::on_pref_toolbar_changed() { m_menu_view_toolbar_connection.block(); m_header.action_view_toolbar->set_active( m_preferences.appearance.show_toolbar); m_menu_view_toolbar_connection.unblock(); } void Gobby::ViewCommands::on_pref_statusbar_changed() { m_menu_view_statusbar_connection.block(); m_header.action_view_statusbar->set_active( m_preferences.appearance.show_statusbar); m_menu_view_statusbar_connection.unblock(); } void Gobby::ViewCommands::on_pref_browser_changed() { m_menu_view_browser_connection.block(); m_header.action_view_browser->set_active( m_preferences.appearance.show_browser); m_menu_view_browser_connection.unblock(); } void Gobby::ViewCommands::on_pref_chat_changed() { m_menu_view_chat_connection.block(); m_header.action_view_chat->set_active( m_preferences.appearance.show_chat); m_menu_view_chat_connection.unblock(); } void Gobby::ViewCommands::on_pref_document_userlist_changed() { m_menu_view_document_userlist_connection.block(); m_header.action_view_document_userlist->set_active( m_preferences.appearance.show_document_userlist); m_menu_view_document_userlist_connection.unblock(); } void Gobby::ViewCommands::on_pref_chat_userlist_changed() { m_menu_view_chat_userlist_connection.block(); m_header.action_view_chat_userlist->set_active( m_preferences.appearance.show_chat_userlist); m_menu_view_chat_userlist_connection.unblock(); } void Gobby::ViewCommands::on_menu_language_changed( const Glib::RefPtr& action) { Glib::RefPtr language_action = Glib::RefPtr::cast_static(action); g_assert(m_current_view != NULL); m_document_language_changed_connection.block(); m_current_view->set_language(language_action->get_language()); m_document_language_changed_connection.unblock(); } void Gobby::ViewCommands::on_doc_language_changed(GtkSourceLanguage* language) { // Select the language of document: const Glib::RefPtr action = (language != NULL) ? m_header.lookup_language_action( m_current_view->get_language()) : m_header.action_view_highlight_none; m_menu_language_changed_connection.block(); // lookup_language_action guarantees not to return NULL: action->set_active(true); m_menu_language_changed_connection.unblock(); } gobby-0.5.0/code/commands/user-join-commands.cpp0000644000175000017500000002665712370704630016512 00000000000000/* Gobby - GTK-based collaborative text editor * Copyright (C) 2008-2014 Armin Burgmeier * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "commands/user-join-commands.hpp" #include "core/nodewatch.hpp" #include "util/i18n.hpp" #include #include #include #include namespace { inline const gchar* _(const gchar* msgid) { return Gobby::_(msgid); } void set_error_text(Gobby::SessionView& view, const Glib::ustring& initial_text) { using namespace Gobby; Glib::ustring type_text; // TODO: Adjust this for chat sessions type_text = _("You can still watch others editing " "the document, but you cannot edit " "it yourself."); const Glib::ustring info_text = _("If you have an idea what could have caused the " "problem, then you may attempt to solve it and " "try again (after having closed this document). " "Otherwise it is most likely a bug in the " "software. In that case, please file a bug report " "at http://gobby.0x539.de/trac/newticket and " "provide as much information as you can, including " "what you did when the problem occurred and how to " "reproduce the problem (if possible) so that we " "can fix the problem in a later version. " "Thank you."); view.set_info( Glib::ustring::compose( _("User Join failed: %1"), initial_text) + "\n\n" + type_text + "\n\n" + info_text, true); } void set_permission_denied_text(Gobby::SessionView& view) { view.set_info( _("Permissions are not granted to modify the document.") , true); } class ParameterProvider: public Gobby::UserJoin::ParameterProvider { public: ParameterProvider(Gobby::SessionView& view, Gobby::Folder& folder, const Gobby::Preferences& preferences): m_view(view), m_folder(folder), m_preferences(preferences) { } virtual std::vector get_user_join_parameters(); protected: void add_text_parameters(std::vector& parameters, Gobby::TextSessionView& view); Gobby::SessionView& m_view; Gobby::Folder& m_folder; const Gobby::Preferences& m_preferences; }; std::vector ParameterProvider::get_user_join_parameters() { // Otherwise join a new user. std::vector params; const GParameter name_param = { "name", { 0 } }; params.push_back(name_param); const GParameter status_param = { "status", { 0 } }; params.push_back(status_param); g_value_init(¶ms[0].value, G_TYPE_STRING); g_value_init(¶ms[1].value, INF_TYPE_USER_STATUS); const Glib::ustring& pref_name = m_preferences.user.name; g_value_set_string(¶ms[0].value, pref_name.c_str()); if(m_folder.get_current_document() == &m_view) g_value_set_enum(¶ms[1].value, INF_USER_ACTIVE); else g_value_set_enum(¶ms[1].value, INF_USER_INACTIVE); Gobby::TextSessionView* text_view = dynamic_cast(&m_view); if(text_view) add_text_parameters(params, *text_view); return params; } void ParameterProvider::add_text_parameters( std::vector& params, Gobby::TextSessionView& view) { InfTextSession* session = view.get_session(); GParameter hue_param = { "hue", { 0 } }; g_value_init(&hue_param.value, G_TYPE_DOUBLE); g_value_set_double(&hue_param.value, m_preferences.user.hue); params.push_back(hue_param); GParameter vector_param = { "vector", { 0 } }; g_value_init(&vector_param.value, INF_ADOPTED_TYPE_STATE_VECTOR); g_value_take_boxed(&vector_param.value, inf_adopted_state_vector_copy( inf_adopted_algorithm_get_current( inf_adopted_session_get_algorithm( INF_ADOPTED_SESSION( session))))); params.push_back(vector_param); GParameter caret_param = { "caret-position", { 0 } }; g_value_init(&caret_param.value, G_TYPE_UINT); GtkTextBuffer* buffer = GTK_TEXT_BUFFER(view.get_text_buffer()); GtkTextMark* mark = gtk_text_buffer_get_insert(buffer); GtkTextIter caret_iter; gtk_text_buffer_get_iter_at_mark(buffer, &caret_iter, mark); g_value_set_uint(&caret_param.value, gtk_text_iter_get_offset(&caret_iter)); params.push_back(caret_param); } } class Gobby::UserJoinCommands::UserJoinInfo { public: UserJoinInfo(UserJoinCommands& commands, std::auto_ptr userjoin, Folder& folder, SessionView& view); private: void on_user_join_finished(InfUser* user, const GError* error); UserJoinCommands& m_commands; std::auto_ptr m_userjoin; Folder& m_folder; SessionView& m_view; }; Gobby::UserJoinCommands::UserJoinInfo::UserJoinInfo(UserJoinCommands& cmds, std::auto_ptr j, Folder& folder, SessionView& view): m_commands(cmds), m_userjoin(j), m_folder(folder), m_view(view) { // Only if userjoin is still running: g_assert(m_userjoin->get_user() == NULL); g_assert(m_userjoin->get_error() == NULL); // Wait for userjoin to finish m_userjoin->signal_finished().connect( sigc::mem_fun( *this, &UserJoinInfo::on_user_join_finished)); } void Gobby::UserJoinCommands::UserJoinInfo:: on_user_join_finished(InfUser* user, const GError* error) { m_commands.on_user_join_finished( m_userjoin->get_proxy(), m_folder, m_view, user, error); // Note that the above call deletes this object! } Gobby::UserJoinCommands::UserJoinCommands(FolderManager& folder_manager, const Preferences& preferences): m_preferences(preferences) { folder_manager.signal_document_added().connect( sigc::mem_fun( *this, &UserJoinCommands::on_document_added)); folder_manager.signal_document_removed().connect( sigc::mem_fun( *this, &UserJoinCommands::on_document_removed)); } Gobby::UserJoinCommands::~UserJoinCommands() { for(UserJoinMap::iterator iter = m_user_join_map.begin(); iter != m_user_join_map.end(); ++iter) { delete iter->second; } } void Gobby::UserJoinCommands::on_document_added(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, Folder& folder, SessionView& view, FolderManager::UserJoinRef j) { g_assert(proxy != NULL); g_assert(m_user_join_map.find(proxy) == m_user_join_map.end()); std::auto_ptr userjoin; if(j && j->get()) { // If there is a user already joined for this session, // then simply use that user instead of joining another one. userjoin = *j; } else { // Otherwise join a new user. std::auto_ptr provider( new ParameterProvider(view, folder, m_preferences)); userjoin.reset(new UserJoin(browser, iter, proxy, provider)); } if(userjoin->get_user() == NULL && userjoin->get_error() == NULL) { m_user_join_map[proxy] = new UserJoinInfo(*this, userjoin, folder, view); } else { on_user_join_finished( proxy, folder, view, userjoin->get_user(), userjoin->get_error()); } } void Gobby::UserJoinCommands::on_document_removed(InfBrowser* browser, const InfBrowserIter* iter, InfSessionProxy* proxy, Folder& folder, SessionView& view) { g_assert(proxy != NULL); UserJoinMap::iterator user_iter = m_user_join_map.find(proxy); // If the user join was successful the session is no longer in the map if(user_iter != m_user_join_map.end()) { delete user_iter->second; m_user_join_map.erase(user_iter); } else { // The user has removed the document. What we do now depends // on whether we are hosting the document or whether we are a // client. If we are a client we reset the connection of the // session proxy, which basically leads to us being // unsubscribed from the document. If we are hosting the // document, we do not want to unsubscribe from it, since // other users might still be connected. We therefore only // remove the local user from the session. If there are indeed // no other clients, then InfdDirectory will take care of // unsubscribing the session 60s after it became idle. if(INFD_IS_SESSION_PROXY(proxy)) { InfUser* user = view.get_active_user(); if(user != NULL) { InfSession* session; g_object_get(G_OBJECT(proxy), "session", &session, NULL); inf_session_set_user_status( session, user, INF_USER_UNAVAILABLE); g_object_unref(session); // TODO: set_active_user should go to // SessionView base: // TODO: The libinftextgtk objects should // reset the active user automatically when it // becomes unavailable. TextSessionView* text_view = dynamic_cast(&view); if(text_view) text_view->set_active_user(NULL); ChatSessionView* chat_view = dynamic_cast(&view); if(chat_view) chat_view->set_active_user(NULL); } } else if(INFC_IS_SESSION_PROXY(proxy)) { infc_session_proxy_set_connection( INFC_SESSION_PROXY(proxy), NULL, NULL, 0); } } } void Gobby::UserJoinCommands::on_user_join_finished(InfSessionProxy* proxy, Folder& folder, SessionView& view, InfUser* user, const GError* error) { g_assert(user != NULL || error != NULL); // Remove userjoin object. It might not exist if // on_document_added() was passed a user immediately. UserJoinMap::iterator user_iter = m_user_join_map.find(proxy); if(user_iter != m_user_join_map.end()) { delete user_iter->second; m_user_join_map.erase(user_iter); } if(error == NULL) { // TODO: Notify the user about alternative user name if s/he uses any view.unset_info(); // TODO: set_active_user should maybe go to SessionView base: TextSessionView* text_view = dynamic_cast(&view); if(text_view) text_view->set_active_user(INF_TEXT_USER(user)); ChatSessionView* chat_view = dynamic_cast(&view); if(chat_view) chat_view->set_active_user(user); } else if(error->domain == inf_request_error_quark() && error->code == INF_REQUEST_ERROR_NOT_AUTHORIZED) { set_permission_denied_text(view); } else { set_error_text(view, error->message); } } gobby-0.5.0/code/features.hpp.in0000644000175000017500000000460412376162131013413 00000000000000/* code/features.hpp.in. Generated from configure.ac by autoheader. */ /* always defined to indicate that i18n is enabled */ #undef ENABLE_NLS /* gettext domain */ #undef GETTEXT_PACKAGE /* Define the location where the catalogs will be installed */ #undef GOBBY_LOCALEDIR /* Define to 1 if you have the `bind_textdomain_codeset' function. */ #undef HAVE_BIND_TEXTDOMAIN_CODESET /* Define to 1 if you have the `dcgettext' function. */ #undef HAVE_DCGETTEXT /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if your C compiler doesn't accept -c and -o together. */ #undef NO_MINUS_C_MINUS_O /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define whether we are running on Mac OS X. */ #undef PLATFORM_OSX /* Define whether we are running on Mac OS X with the quartz GDK target */ #undef PLATFORM_OSX_NATIVE /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Whether support for unique is enabled */ #undef WITH_UNIQUE gobby-0.5.0/m4/0000755000175000017500000000000012376162130010140 500000000000000gobby-0.5.0/m4/Makefile.in0000644000175000017500000002620712376162115012137 00000000000000# Makefile.in generated by automake 1.11.6 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } 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 = m4 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/code/features.hpp CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALL_LINGUAS = @ALL_LINGUAS@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CATALOGS = @CATALOGS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DISTCHECK_CONFIGURE_FLAGS = @DISTCHECK_CONFIGURE_FLAGS@ DOC_USER_FORMATS = @DOC_USER_FORMATS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GMOFILES = @GMOFILES@ GMSGFMT = @GMSGFMT@ GREP = @GREP@ 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@ INTLTOOL_V_MERGE = @INTLTOOL_V_MERGE@ INTLTOOL_V_MERGE_OPTIONS = @INTLTOOL_V_MERGE_OPTIONS@ INTLTOOL__v_MERGE_ = @INTLTOOL__v_MERGE_@ INTLTOOL__v_MERGE_0 = @INTLTOOL__v_MERGE_0@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MKINSTALLDIRS = @MKINSTALLDIRS@ MSGFMT = @MSGFMT@ MSGFMT_OPTS = @MSGFMT_OPTS@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ OMF_DIR = @OMF_DIR@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POFILES = @POFILES@ POSUB = @POSUB@ PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ WINDRES = @WINDRES@ XGETTEXT = @XGETTEXT@ 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_CXX = @ac_ct_CXX@ 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@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gobby_CFLAGS = @gobby_CFLAGS@ gobby_LIBS = @gobby_LIBS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infinote_CFLAGS = @infinote_CFLAGS@ infinote_LIBS = @infinote_LIBS@ infodir = @infodir@ install_sh = @install_sh@ intltool__v_merge_options_ = @intltool__v_merge_options_@ intltool__v_merge_options_0 = @intltool__v_merge_options_0@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ 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@ unique_CFLAGS = @unique_CFLAGS@ unique_LIBS = @unique_LIBS@ m4macros = \ ac_pkg_check_gtkmm.m4 EXTRA_DIST = $(m4macros) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(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) --foreign m4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign m4/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: 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 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -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 mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic 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 -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic 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-generic pdf pdf-am ps ps-am 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: gobby-0.5.0/m4/ac_pkg_check_gtkmm.m40000644000175000017500000000033011517044575014106 00000000000000AC_DEFUN(PKG_CHECK_GTKMM, [ GTKMM_VER=0 PKG_CHECK_MODULES(GTKMM, gtkmm-2.4 >= 2.8.0, [ GTKMM_VER=28 ], [ PKG_CHECK_MODULES(GTKMM, gtkmm-2.4 >= 2.6.0) GTKMM_VER=26 ]) AC_SUBST(GTKMM_VER) ]) gobby-0.5.0/m4/Makefile.am0000644000175000017500000000007711517044575012130 00000000000000m4macros = \ ac_pkg_check_gtkmm.m4 EXTRA_DIST = $(m4macros) gobby-0.5.0/INSTALL0000644000175000017500000003660012067604151010577 00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2011 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf bug. Until the bug is fixed you can use this workaround: CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. gobby-0.5.0/gobby-0.5.desktop.in0000644000175000017500000000043712364474462013161 00000000000000[Desktop Entry] _Name=Gobby _GenericName=Collaborative Editor _X-GNOME-FullName=Gobby Collaborative Editor (0.5) _Comment=Edit text files collaboratively Exec=gobby-0.5 Terminal=false Type=Application Icon=gobby-0.5 Categories=TextEditor;Network; StartupNotify=true MimeType=text/plain; gobby-0.5.0/COPYING0000644000175000017500000000136612370427447010612 00000000000000Copyright (c) 2008-2014, Armin Burgmeier Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.