Imported Upstream version 0.4.1
Laurent Léonard
12 years ago
120 | 120 | AUTOHEADER = @AUTOHEADER@ |
121 | 121 | AUTOMAKE = @AUTOMAKE@ |
122 | 122 | AWK = @AWK@ |
123 | CATALOGS = @CATALOGS@ | |
124 | CATOBJEXT = @CATOBJEXT@ | |
125 | 123 | CC = @CC@ |
126 | 124 | CCDEPMODE = @CCDEPMODE@ |
127 | 125 | CFLAGS = @CFLAGS@ |
145 | 143 | GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ |
146 | 144 | GLIB2_CFLAGS = @GLIB2_CFLAGS@ |
147 | 145 | GLIB2_LIBS = @GLIB2_LIBS@ |
148 | GMOFILES = @GMOFILES@ | |
149 | 146 | GMSGFMT = @GMSGFMT@ |
150 | 147 | GREP = @GREP@ |
151 | 148 | GTK_API_VERSION = @GTK_API_VERSION@ |
160 | 157 | INSTALL_PROGRAM = @INSTALL_PROGRAM@ |
161 | 158 | INSTALL_SCRIPT = @INSTALL_SCRIPT@ |
162 | 159 | INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ |
163 | INSTOBJEXT = @INSTOBJEXT@ | |
164 | INTLLIBS = @INTLLIBS@ | |
165 | 160 | INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ |
166 | 161 | INTLTOOL_MERGE = @INTLTOOL_MERGE@ |
167 | 162 | INTLTOOL_PERL = @INTLTOOL_PERL@ |
181 | 176 | MAKEINFO = @MAKEINFO@ |
182 | 177 | MANIFEST_TOOL = @MANIFEST_TOOL@ |
183 | 178 | MKDIR_P = @MKDIR_P@ |
184 | MKINSTALLDIRS = @MKINSTALLDIRS@ | |
185 | 179 | MOZILLA_PLUGIN_CFLAGS = @MOZILLA_PLUGIN_CFLAGS@ |
186 | 180 | MOZILLA_PLUGIN_LIBS = @MOZILLA_PLUGIN_LIBS@ |
187 | 181 | MSGFMT = @MSGFMT@ |
188 | MSGFMT_OPTS = @MSGFMT_OPTS@ | |
189 | 182 | MSGMERGE = @MSGMERGE@ |
190 | 183 | NM = @NM@ |
191 | 184 | NMEDIT = @NMEDIT@ |
206 | 199 | PKG_CONFIG = @PKG_CONFIG@ |
207 | 200 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ |
208 | 201 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ |
209 | POFILES = @POFILES@ | |
210 | POSUB = @POSUB@ | |
211 | PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ | |
212 | PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ | |
213 | 202 | RANLIB = @RANLIB@ |
214 | 203 | SED = @SED@ |
215 | 204 | SET_MAKE = @SET_MAKE@ |
0 | 0 | Virt Viewer News |
1 | 1 | ================ |
2 | ||
3 | 0.4.1: Aug 4, 2011 | |
4 | ------------------- | |
5 | ||
6 | - Remove bogus use of AM_GLIB_GNU_GETTEXT macro to try to | |
7 | facilitate BSD builds | |
8 | - Support multiple monitors with SPICE and QXL drivers | |
9 | - Don't hardcode SSH port to 22 when tunnelling | |
2 | 10 | |
3 | 11 | 0.4.0: Jul 12, 2011 |
4 | 12 | ------------------- |
17 | 17 | You have another version of autoconf. It may work, but is not guaranteed to. |
18 | 18 | If you have problems, you may need to regenerate the build system entirely. |
19 | 19 | To do so, use the procedure documented by the package, typically `autoreconf'.])]) |
20 | ||
21 | # Copyright (C) 1995-2002 Free Software Foundation, Inc. | |
22 | # Copyright (C) 2001-2003,2004 Red Hat, Inc. | |
23 | # | |
24 | # This file is free software, distributed under the terms of the GNU | |
25 | # General Public License. As a special exception to the GNU General | |
26 | # Public License, this file may be distributed as part of a program | |
27 | # that contains a configuration script generated by Autoconf, under | |
28 | # the same distribution terms as the rest of that program. | |
29 | # | |
30 | # This file can be copied and used freely without restrictions. It can | |
31 | # be used in projects which are not available under the GNU Public License | |
32 | # but which still want to provide support for the GNU gettext functionality. | |
33 | # | |
34 | # Macro to add for using GNU gettext. | |
35 | # Ulrich Drepper <drepper@cygnus.com>, 1995, 1996 | |
36 | # | |
37 | # Modified to never use included libintl. | |
38 | # Owen Taylor <otaylor@redhat.com>, 12/15/1998 | |
39 | # | |
40 | # Major rework to remove unused code | |
41 | # Owen Taylor <otaylor@redhat.com>, 12/11/2002 | |
42 | # | |
43 | # Added better handling of ALL_LINGUAS from GNU gettext version | |
44 | # written by Bruno Haible, Owen Taylor <otaylor.redhat.com> 5/30/3002 | |
45 | # | |
46 | # Modified to require ngettext | |
47 | # Matthias Clasen <mclasen@redhat.com> 08/06/2004 | |
48 | # | |
49 | # We need this here as well, since someone might use autoconf-2.5x | |
50 | # to configure GLib then an older version to configure a package | |
51 | # using AM_GLIB_GNU_GETTEXT | |
52 | AC_PREREQ(2.53) | |
53 | ||
54 | dnl | |
55 | dnl We go to great lengths to make sure that aclocal won't | |
56 | dnl try to pull in the installed version of these macros | |
57 | dnl when running aclocal in the glib directory. | |
58 | dnl | |
59 | m4_copy([AC_DEFUN],[glib_DEFUN]) | |
60 | m4_copy([AC_REQUIRE],[glib_REQUIRE]) | |
61 | dnl | |
62 | dnl At the end, if we're not within glib, we'll define the public | |
63 | dnl definitions in terms of our private definitions. | |
64 | dnl | |
65 | ||
66 | # GLIB_LC_MESSAGES | |
67 | #-------------------- | |
68 | glib_DEFUN([GLIB_LC_MESSAGES], | |
69 | [AC_CHECK_HEADERS([locale.h]) | |
70 | if test $ac_cv_header_locale_h = yes; then | |
71 | AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, | |
72 | [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES], | |
73 | am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) | |
74 | if test $am_cv_val_LC_MESSAGES = yes; then | |
75 | AC_DEFINE(HAVE_LC_MESSAGES, 1, | |
76 | [Define if your <locale.h> file defines LC_MESSAGES.]) | |
77 | fi | |
78 | fi]) | |
79 | ||
80 | # GLIB_PATH_PROG_WITH_TEST | |
81 | #---------------------------- | |
82 | dnl GLIB_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, | |
83 | dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) | |
84 | glib_DEFUN([GLIB_PATH_PROG_WITH_TEST], | |
85 | [# Extract the first word of "$2", so it can be a program name with args. | |
86 | set dummy $2; ac_word=[$]2 | |
87 | AC_MSG_CHECKING([for $ac_word]) | |
88 | AC_CACHE_VAL(ac_cv_path_$1, | |
89 | [case "[$]$1" in | |
90 | /*) | |
91 | ac_cv_path_$1="[$]$1" # Let the user override the test with a path. | |
92 | ;; | |
93 | *) | |
94 | IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" | |
95 | for ac_dir in ifelse([$5], , $PATH, [$5]); do | |
96 | test -z "$ac_dir" && ac_dir=. | |
97 | if test -f $ac_dir/$ac_word; then | |
98 | if [$3]; then | |
99 | ac_cv_path_$1="$ac_dir/$ac_word" | |
100 | break | |
101 | fi | |
102 | fi | |
103 | done | |
104 | IFS="$ac_save_ifs" | |
105 | dnl If no 4th arg is given, leave the cache variable unset, | |
106 | dnl so AC_PATH_PROGS will keep looking. | |
107 | ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" | |
108 | ])dnl | |
109 | ;; | |
110 | esac])dnl | |
111 | $1="$ac_cv_path_$1" | |
112 | if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then | |
113 | AC_MSG_RESULT([$]$1) | |
114 | else | |
115 | AC_MSG_RESULT(no) | |
116 | fi | |
117 | AC_SUBST($1)dnl | |
118 | ]) | |
119 | ||
120 | # GLIB_WITH_NLS | |
121 | #----------------- | |
122 | glib_DEFUN([GLIB_WITH_NLS], | |
123 | dnl NLS is obligatory | |
124 | [USE_NLS=yes | |
125 | AC_SUBST(USE_NLS) | |
126 | ||
127 | gt_cv_have_gettext=no | |
128 | ||
129 | CATOBJEXT=NONE | |
130 | XGETTEXT=: | |
131 | INTLLIBS= | |
132 | ||
133 | AC_CHECK_HEADER(libintl.h, | |
134 | [gt_cv_func_dgettext_libintl="no" | |
135 | libintl_extra_libs="" | |
136 | ||
137 | # | |
138 | # First check in libc | |
139 | # | |
140 | AC_CACHE_CHECK([for ngettext in libc], gt_cv_func_ngettext_libc, | |
141 | [AC_TRY_LINK([ | |
142 | #include <libintl.h> | |
143 | ], | |
144 | [return !ngettext ("","", 1)], | |
145 | gt_cv_func_ngettext_libc=yes, | |
146 | gt_cv_func_ngettext_libc=no) | |
147 | ]) | |
148 | ||
149 | if test "$gt_cv_func_ngettext_libc" = "yes" ; then | |
150 | AC_CACHE_CHECK([for dgettext in libc], gt_cv_func_dgettext_libc, | |
151 | [AC_TRY_LINK([ | |
152 | #include <libintl.h> | |
153 | ], | |
154 | [return !dgettext ("","")], | |
155 | gt_cv_func_dgettext_libc=yes, | |
156 | gt_cv_func_dgettext_libc=no) | |
157 | ]) | |
158 | fi | |
159 | ||
160 | if test "$gt_cv_func_ngettext_libc" = "yes" ; then | |
161 | AC_CHECK_FUNCS(bind_textdomain_codeset) | |
162 | fi | |
163 | ||
164 | # | |
165 | # If we don't have everything we want, check in libintl | |
166 | # | |
167 | if test "$gt_cv_func_dgettext_libc" != "yes" \ | |
168 | || test "$gt_cv_func_ngettext_libc" != "yes" \ | |
169 | || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then | |
170 | ||
171 | AC_CHECK_LIB(intl, bindtextdomain, | |
172 | [AC_CHECK_LIB(intl, ngettext, | |
173 | [AC_CHECK_LIB(intl, dgettext, | |
174 | gt_cv_func_dgettext_libintl=yes)])]) | |
175 | ||
176 | if test "$gt_cv_func_dgettext_libintl" != "yes" ; then | |
177 | AC_MSG_CHECKING([if -liconv is needed to use gettext]) | |
178 | AC_MSG_RESULT([]) | |
179 | AC_CHECK_LIB(intl, ngettext, | |
180 | [AC_CHECK_LIB(intl, dcgettext, | |
181 | [gt_cv_func_dgettext_libintl=yes | |
182 | libintl_extra_libs=-liconv], | |
183 | :,-liconv)], | |
184 | :,-liconv) | |
185 | fi | |
186 | ||
187 | # | |
188 | # If we found libintl, then check in it for bind_textdomain_codeset(); | |
189 | # we'll prefer libc if neither have bind_textdomain_codeset(), | |
190 | # and both have dgettext and ngettext | |
191 | # | |
192 | if test "$gt_cv_func_dgettext_libintl" = "yes" ; then | |
193 | glib_save_LIBS="$LIBS" | |
194 | LIBS="$LIBS -lintl $libintl_extra_libs" | |
195 | unset ac_cv_func_bind_textdomain_codeset | |
196 | AC_CHECK_FUNCS(bind_textdomain_codeset) | |
197 | LIBS="$glib_save_LIBS" | |
198 | ||
199 | if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then | |
200 | gt_cv_func_dgettext_libc=no | |
201 | else | |
202 | if test "$gt_cv_func_dgettext_libc" = "yes" \ | |
203 | && test "$gt_cv_func_ngettext_libc" = "yes"; then | |
204 | gt_cv_func_dgettext_libintl=no | |
205 | fi | |
206 | fi | |
207 | fi | |
208 | fi | |
209 | ||
210 | if test "$gt_cv_func_dgettext_libc" = "yes" \ | |
211 | || test "$gt_cv_func_dgettext_libintl" = "yes"; then | |
212 | gt_cv_have_gettext=yes | |
213 | fi | |
214 | ||
215 | if test "$gt_cv_func_dgettext_libintl" = "yes"; then | |
216 | INTLLIBS="-lintl $libintl_extra_libs" | |
217 | fi | |
218 | ||
219 | if test "$gt_cv_have_gettext" = "yes"; then | |
220 | AC_DEFINE(HAVE_GETTEXT,1, | |
221 | [Define if the GNU gettext() function is already present or preinstalled.]) | |
222 | GLIB_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, | |
223 | [test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"], no)dnl | |
224 | if test "$MSGFMT" != "no"; then | |
225 | glib_save_LIBS="$LIBS" | |
226 | LIBS="$LIBS $INTLLIBS" | |
227 | AC_CHECK_FUNCS(dcgettext) | |
228 | MSGFMT_OPTS= | |
229 | AC_MSG_CHECKING([if msgfmt accepts -c]) | |
230 | GLIB_RUN_PROG([$MSGFMT -c -o /dev/null],[ | |
231 | msgid "" | |
232 | msgstr "" | |
233 | "Content-Type: text/plain; charset=UTF-8\n" | |
234 | "Project-Id-Version: test 1.0\n" | |
235 | "PO-Revision-Date: 2007-02-15 12:01+0100\n" | |
236 | "Last-Translator: test <foo@bar.xx>\n" | |
237 | "Language-Team: C <LL@li.org>\n" | |
238 | "MIME-Version: 1.0\n" | |
239 | "Content-Transfer-Encoding: 8bit\n" | |
240 | ], [MSGFMT_OPTS=-c; AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no])]) | |
241 | AC_SUBST(MSGFMT_OPTS) | |
242 | AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) | |
243 | GLIB_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, | |
244 | [test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"], :) | |
245 | AC_TRY_LINK(, [extern int _nl_msg_cat_cntr; | |
246 | return _nl_msg_cat_cntr], | |
247 | [CATOBJEXT=.gmo | |
248 | DATADIRNAME=share], | |
249 | [case $host in | |
250 | *-*-solaris*) | |
251 | dnl On Solaris, if bind_textdomain_codeset is in libc, | |
252 | dnl GNU format message catalog is always supported, | |
253 | dnl since both are added to the libc all together. | |
254 | dnl Hence, we'd like to go with DATADIRNAME=share and | |
255 | dnl and CATOBJEXT=.gmo in this case. | |
256 | AC_CHECK_FUNC(bind_textdomain_codeset, | |
257 | [CATOBJEXT=.gmo | |
258 | DATADIRNAME=share], | |
259 | [CATOBJEXT=.mo | |
260 | DATADIRNAME=lib]) | |
261 | ;; | |
262 | *) | |
263 | CATOBJEXT=.mo | |
264 | DATADIRNAME=lib | |
265 | ;; | |
266 | esac]) | |
267 | LIBS="$glib_save_LIBS" | |
268 | INSTOBJEXT=.mo | |
269 | else | |
270 | gt_cv_have_gettext=no | |
271 | fi | |
272 | fi | |
273 | ]) | |
274 | ||
275 | if test "$gt_cv_have_gettext" = "yes" ; then | |
276 | AC_DEFINE(ENABLE_NLS, 1, | |
277 | [always defined to indicate that i18n is enabled]) | |
278 | fi | |
279 | ||
280 | dnl Test whether we really found GNU xgettext. | |
281 | if test "$XGETTEXT" != ":"; then | |
282 | dnl If it is not GNU xgettext we define it as : so that the | |
283 | dnl Makefiles still can work. | |
284 | if $XGETTEXT --omit-header /dev/null 2> /dev/null; then | |
285 | : ; | |
286 | else | |
287 | AC_MSG_RESULT( | |
288 | [found xgettext program is not GNU xgettext; ignore it]) | |
289 | XGETTEXT=":" | |
290 | fi | |
291 | fi | |
292 | ||
293 | # We need to process the po/ directory. | |
294 | POSUB=po | |
295 | ||
296 | AC_OUTPUT_COMMANDS( | |
297 | [case "$CONFIG_FILES" in *po/Makefile.in*) | |
298 | sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile | |
299 | esac]) | |
300 | ||
301 | dnl These rules are solely for the distribution goal. While doing this | |
302 | dnl we only have to keep exactly one list of the available catalogs | |
303 | dnl in configure.ac. | |
304 | for lang in $ALL_LINGUAS; do | |
305 | GMOFILES="$GMOFILES $lang.gmo" | |
306 | POFILES="$POFILES $lang.po" | |
307 | done | |
308 | ||
309 | dnl Make all variables we use known to autoconf. | |
310 | AC_SUBST(CATALOGS) | |
311 | AC_SUBST(CATOBJEXT) | |
312 | AC_SUBST(DATADIRNAME) | |
313 | AC_SUBST(GMOFILES) | |
314 | AC_SUBST(INSTOBJEXT) | |
315 | AC_SUBST(INTLLIBS) | |
316 | AC_SUBST(PO_IN_DATADIR_TRUE) | |
317 | AC_SUBST(PO_IN_DATADIR_FALSE) | |
318 | AC_SUBST(POFILES) | |
319 | AC_SUBST(POSUB) | |
320 | ]) | |
321 | ||
322 | # AM_GLIB_GNU_GETTEXT | |
323 | # ------------------- | |
324 | # Do checks necessary for use of gettext. If a suitable implementation | |
325 | # of gettext is found in either in libintl or in the C library, | |
326 | # it will set INTLLIBS to the libraries needed for use of gettext | |
327 | # and AC_DEFINE() HAVE_GETTEXT and ENABLE_NLS. (The shell variable | |
328 | # gt_cv_have_gettext will be set to "yes".) It will also call AC_SUBST() | |
329 | # on various variables needed by the Makefile.in.in installed by | |
330 | # glib-gettextize. | |
331 | dnl | |
332 | glib_DEFUN([GLIB_GNU_GETTEXT], | |
333 | [AC_REQUIRE([AC_PROG_CC])dnl | |
334 | AC_REQUIRE([AC_HEADER_STDC])dnl | |
335 | ||
336 | GLIB_LC_MESSAGES | |
337 | GLIB_WITH_NLS | |
338 | ||
339 | if test "$gt_cv_have_gettext" = "yes"; then | |
340 | if test "x$ALL_LINGUAS" = "x"; then | |
341 | LINGUAS= | |
342 | else | |
343 | AC_MSG_CHECKING(for catalogs to be installed) | |
344 | NEW_LINGUAS= | |
345 | for presentlang in $ALL_LINGUAS; do | |
346 | useit=no | |
347 | if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then | |
348 | desiredlanguages="$LINGUAS" | |
349 | else | |
350 | desiredlanguages="$ALL_LINGUAS" | |
351 | fi | |
352 | for desiredlang in $desiredlanguages; do | |
353 | # Use the presentlang catalog if desiredlang is | |
354 | # a. equal to presentlang, or | |
355 | # b. a variant of presentlang (because in this case, | |
356 | # presentlang can be used as a fallback for messages | |
357 | # which are not translated in the desiredlang catalog). | |
358 | case "$desiredlang" in | |
359 | "$presentlang"*) useit=yes;; | |
360 | esac | |
361 | done | |
362 | if test $useit = yes; then | |
363 | NEW_LINGUAS="$NEW_LINGUAS $presentlang" | |
364 | fi | |
365 | done | |
366 | LINGUAS=$NEW_LINGUAS | |
367 | AC_MSG_RESULT($LINGUAS) | |
368 | fi | |
369 | ||
370 | dnl Construct list of names of catalog files to be constructed. | |
371 | if test -n "$LINGUAS"; then | |
372 | for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done | |
373 | fi | |
374 | fi | |
375 | ||
376 | dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly | |
377 | dnl find the mkinstalldirs script in another subdir but ($top_srcdir). | |
378 | dnl Try to locate is. | |
379 | MKINSTALLDIRS= | |
380 | if test -n "$ac_aux_dir"; then | |
381 | MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" | |
382 | fi | |
383 | if test -z "$MKINSTALLDIRS"; then | |
384 | MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" | |
385 | fi | |
386 | AC_SUBST(MKINSTALLDIRS) | |
387 | ||
388 | dnl Generate list of files to be processed by xgettext which will | |
389 | dnl be included in po/Makefile. | |
390 | test -d po || mkdir po | |
391 | if test "x$srcdir" != "x."; then | |
392 | if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then | |
393 | posrcprefix="$srcdir/" | |
394 | else | |
395 | posrcprefix="../$srcdir/" | |
396 | fi | |
397 | else | |
398 | posrcprefix="../" | |
399 | fi | |
400 | rm -f po/POTFILES | |
401 | sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ | |
402 | < $srcdir/po/POTFILES.in > po/POTFILES | |
403 | ]) | |
404 | ||
405 | # AM_GLIB_DEFINE_LOCALEDIR(VARIABLE) | |
406 | # ------------------------------- | |
407 | # Define VARIABLE to the location where catalog files will | |
408 | # be installed by po/Makefile. | |
409 | glib_DEFUN([GLIB_DEFINE_LOCALEDIR], | |
410 | [glib_REQUIRE([GLIB_GNU_GETTEXT])dnl | |
411 | glib_save_prefix="$prefix" | |
412 | glib_save_exec_prefix="$exec_prefix" | |
413 | glib_save_datarootdir="$datarootdir" | |
414 | test "x$prefix" = xNONE && prefix=$ac_default_prefix | |
415 | test "x$exec_prefix" = xNONE && exec_prefix=$prefix | |
416 | datarootdir=`eval echo "${datarootdir}"` | |
417 | if test "x$CATOBJEXT" = "x.mo" ; then | |
418 | localedir=`eval echo "${libdir}/locale"` | |
419 | else | |
420 | localedir=`eval echo "${datadir}/locale"` | |
421 | fi | |
422 | prefix="$glib_save_prefix" | |
423 | exec_prefix="$glib_save_exec_prefix" | |
424 | datarootdir="$glib_save_datarootdir" | |
425 | AC_DEFINE_UNQUOTED($1, "$localedir", | |
426 | [Define the location where the catalogs will be installed]) | |
427 | ]) | |
428 | ||
429 | dnl | |
430 | dnl Now the definitions that aclocal will find | |
431 | dnl | |
432 | ifdef(glib_configure_ac,[],[ | |
433 | AC_DEFUN([AM_GLIB_GNU_GETTEXT],[GLIB_GNU_GETTEXT($@)]) | |
434 | AC_DEFUN([AM_GLIB_DEFINE_LOCALEDIR],[GLIB_DEFINE_LOCALEDIR($@)]) | |
435 | ])dnl | |
436 | ||
437 | # GLIB_RUN_PROG(PROGRAM, TEST-FILE, [ACTION-IF-PASS], [ACTION-IF-FAIL]) | |
438 | # | |
439 | # Create a temporary file with TEST-FILE as its contents and pass the | |
440 | # file name to PROGRAM. Perform ACTION-IF-PASS if PROGRAM exits with | |
441 | # 0 and perform ACTION-IF-FAIL for any other exit status. | |
442 | AC_DEFUN([GLIB_RUN_PROG], | |
443 | [cat >conftest.foo <<_ACEOF | |
444 | $2 | |
445 | _ACEOF | |
446 | if AC_RUN_LOG([$1 conftest.foo]); then | |
447 | m4_ifval([$3], [$3], [:]) | |
448 | m4_ifvaln([$4], [else $4])dnl | |
449 | echo "$as_me: failed input was:" >&AS_MESSAGE_LOG_FD | |
450 | sed 's/^/| /' conftest.foo >&AS_MESSAGE_LOG_FD | |
451 | fi]) | |
452 | ||
453 | 20 | |
454 | 21 | |
455 | 22 | dnl IT_PROG_INTLTOOL([MINIMUM-VERSION], [no-xml]) |
0 | 0 | /* config.h.in. Generated from configure.ac by autoheader. */ |
1 | ||
2 | /* always defined to indicate that i18n is enabled */ | |
3 | #undef ENABLE_NLS | |
4 | 1 | |
5 | 2 | /* GETTEXT package name */ |
6 | 3 | #undef GETTEXT_PACKAGE |
7 | ||
8 | /* Define to 1 if you have the `bind_textdomain_codeset' function. */ | |
9 | #undef HAVE_BIND_TEXTDOMAIN_CODESET | |
10 | ||
11 | /* Define to 1 if you have the `dcgettext' function. */ | |
12 | #undef HAVE_DCGETTEXT | |
13 | 4 | |
14 | 5 | /* Define to 1 if you have the <dlfcn.h> header file. */ |
15 | 6 | #undef HAVE_DLFCN_H |
17 | 8 | /* Define to 1 if you have the `fork' function. */ |
18 | 9 | #undef HAVE_FORK |
19 | 10 | |
20 | /* Define if the GNU gettext() function is already present or preinstalled. */ | |
21 | #undef HAVE_GETTEXT | |
22 | ||
23 | 11 | /* Define to 1 if you have the <inttypes.h> header file. */ |
24 | 12 | #undef HAVE_INTTYPES_H |
25 | ||
26 | /* Define if your <locale.h> file defines LC_MESSAGES. */ | |
27 | #undef HAVE_LC_MESSAGES | |
28 | ||
29 | /* Define to 1 if you have the <locale.h> header file. */ | |
30 | #undef HAVE_LOCALE_H | |
31 | 13 | |
32 | 14 | /* Define to 1 if you have the <memory.h> header file. */ |
33 | 15 | #undef HAVE_MEMORY_H |
0 | 0 | #! /bin/sh |
1 | 1 | # Guess values for system-dependent variables and create Makefiles. |
2 | # Generated by GNU Autoconf 2.68 for virt-viewer 0.4.0. | |
2 | # Generated by GNU Autoconf 2.68 for virt-viewer 0.4.1. | |
3 | 3 | # |
4 | 4 | # |
5 | 5 | # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, |
566 | 566 | # Identity of this package. |
567 | 567 | PACKAGE_NAME='virt-viewer' |
568 | 568 | PACKAGE_TARNAME='virt-viewer' |
569 | PACKAGE_VERSION='0.4.0' | |
570 | PACKAGE_STRING='virt-viewer 0.4.0' | |
569 | PACKAGE_VERSION='0.4.1' | |
570 | PACKAGE_STRING='virt-viewer 0.4.1' | |
571 | 571 | PACKAGE_BUGREPORT='' |
572 | 572 | PACKAGE_URL='' |
573 | 573 | |
645 | 645 | PKG_CONFIG_LIBDIR |
646 | 646 | PKG_CONFIG_PATH |
647 | 647 | PKG_CONFIG |
648 | MKINSTALLDIRS | |
649 | POSUB | |
650 | POFILES | |
651 | PO_IN_DATADIR_FALSE | |
652 | PO_IN_DATADIR_TRUE | |
653 | INTLLIBS | |
654 | INSTOBJEXT | |
655 | GMOFILES | |
656 | CATOBJEXT | |
657 | CATALOGS | |
658 | MSGFMT_OPTS | |
659 | 648 | DATADIRNAME |
660 | 649 | ALL_LINGUAS |
661 | 650 | INTLTOOL_PERL |
1388 | 1377 | # Omit some internal or obsolete options to make the list less imposing. |
1389 | 1378 | # This message is too long to be a string in the A/UX 3.1 sh. |
1390 | 1379 | cat <<_ACEOF |
1391 | \`configure' configures virt-viewer 0.4.0 to adapt to many kinds of systems. | |
1380 | \`configure' configures virt-viewer 0.4.1 to adapt to many kinds of systems. | |
1392 | 1381 | |
1393 | 1382 | Usage: $0 [OPTION]... [VAR=VALUE]... |
1394 | 1383 | |
1458 | 1447 | |
1459 | 1448 | if test -n "$ac_init_help"; then |
1460 | 1449 | case $ac_init_help in |
1461 | short | recursive ) echo "Configuration of virt-viewer 0.4.0:";; | |
1450 | short | recursive ) echo "Configuration of virt-viewer 0.4.1:";; | |
1462 | 1451 | esac |
1463 | 1452 | cat <<\_ACEOF |
1464 | 1453 | |
1604 | 1593 | test -n "$ac_init_help" && exit $ac_status |
1605 | 1594 | if $ac_init_version; then |
1606 | 1595 | cat <<\_ACEOF |
1607 | virt-viewer configure 0.4.0 | |
1596 | virt-viewer configure 0.4.1 | |
1608 | 1597 | generated by GNU Autoconf 2.68 |
1609 | 1598 | |
1610 | 1599 | Copyright (C) 2010 Free Software Foundation, Inc. |
1969 | 1958 | This file contains any messages produced by compilers while |
1970 | 1959 | running configure, to aid debugging if configure makes a mistake. |
1971 | 1960 | |
1972 | It was created by virt-viewer $as_me 0.4.0, which was | |
1961 | It was created by virt-viewer $as_me 0.4.1, which was | |
1973 | 1962 | generated by GNU Autoconf 2.68. Invocation command line was |
1974 | 1963 | |
1975 | 1964 | $ $0 $@ |
2787 | 2776 | |
2788 | 2777 | # Define the identity of the package. |
2789 | 2778 | PACKAGE='virt-viewer' |
2790 | VERSION='0.4.0' | |
2779 | VERSION='0.4.1' | |
2791 | 2780 | |
2792 | 2781 | |
2793 | 2782 | cat >>confdefs.h <<_ACEOF |
12164 | 12153 | |
12165 | 12154 | |
12166 | 12155 | |
12167 | for ac_header in locale.h | |
12168 | do : | |
12169 | ac_fn_c_check_header_mongrel "$LINENO" "locale.h" "ac_cv_header_locale_h" "$ac_includes_default" | |
12170 | if test "x$ac_cv_header_locale_h" = xyes; then : | |
12171 | cat >>confdefs.h <<_ACEOF | |
12172 | #define HAVE_LOCALE_H 1 | |
12173 | _ACEOF | |
12174 | ||
12175 | fi | |
12176 | ||
12177 | done | |
12178 | ||
12179 | if test $ac_cv_header_locale_h = yes; then | |
12180 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 | |
12181 | $as_echo_n "checking for LC_MESSAGES... " >&6; } | |
12182 | if ${am_cv_val_LC_MESSAGES+:} false; then : | |
12183 | $as_echo_n "(cached) " >&6 | |
12184 | else | |
12185 | cat confdefs.h - <<_ACEOF >conftest.$ac_ext | |
12186 | /* end confdefs.h. */ | |
12187 | #include <locale.h> | |
12188 | int | |
12189 | main () | |
12190 | { | |
12191 | return LC_MESSAGES | |
12192 | ; | |
12193 | return 0; | |
12194 | } | |
12195 | _ACEOF | |
12196 | if ac_fn_c_try_link "$LINENO"; then : | |
12197 | am_cv_val_LC_MESSAGES=yes | |
12198 | else | |
12199 | am_cv_val_LC_MESSAGES=no | |
12200 | fi | |
12201 | rm -f core conftest.err conftest.$ac_objext \ | |
12202 | conftest$ac_exeext conftest.$ac_ext | |
12203 | fi | |
12204 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_val_LC_MESSAGES" >&5 | |
12205 | $as_echo "$am_cv_val_LC_MESSAGES" >&6; } | |
12206 | if test $am_cv_val_LC_MESSAGES = yes; then | |
12207 | ||
12208 | $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h | |
12209 | ||
12210 | fi | |
12211 | fi | |
12212 | USE_NLS=yes | |
12213 | ||
12214 | ||
12215 | gt_cv_have_gettext=no | |
12216 | ||
12217 | CATOBJEXT=NONE | |
12218 | XGETTEXT=: | |
12219 | INTLLIBS= | |
12220 | ||
12221 | ac_fn_c_check_header_mongrel "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" | |
12222 | if test "x$ac_cv_header_libintl_h" = xyes; then : | |
12223 | gt_cv_func_dgettext_libintl="no" | |
12224 | libintl_extra_libs="" | |
12225 | ||
12226 | # | |
12227 | # First check in libc | |
12228 | # | |
12229 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in libc" >&5 | |
12230 | $as_echo_n "checking for ngettext in libc... " >&6; } | |
12231 | if ${gt_cv_func_ngettext_libc+:} false; then : | |
12232 | $as_echo_n "(cached) " >&6 | |
12233 | else | |
12234 | cat confdefs.h - <<_ACEOF >conftest.$ac_ext | |
12235 | /* end confdefs.h. */ | |
12236 | ||
12237 | #include <libintl.h> | |
12238 | ||
12239 | int | |
12240 | main () | |
12241 | { | |
12242 | return !ngettext ("","", 1) | |
12243 | ; | |
12244 | return 0; | |
12245 | } | |
12246 | _ACEOF | |
12247 | if ac_fn_c_try_link "$LINENO"; then : | |
12248 | gt_cv_func_ngettext_libc=yes | |
12249 | else | |
12250 | gt_cv_func_ngettext_libc=no | |
12251 | fi | |
12252 | rm -f core conftest.err conftest.$ac_objext \ | |
12253 | conftest$ac_exeext conftest.$ac_ext | |
12254 | ||
12255 | fi | |
12256 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_ngettext_libc" >&5 | |
12257 | $as_echo "$gt_cv_func_ngettext_libc" >&6; } | |
12258 | ||
12259 | if test "$gt_cv_func_ngettext_libc" = "yes" ; then | |
12260 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in libc" >&5 | |
12261 | $as_echo_n "checking for dgettext in libc... " >&6; } | |
12262 | if ${gt_cv_func_dgettext_libc+:} false; then : | |
12263 | $as_echo_n "(cached) " >&6 | |
12264 | else | |
12265 | cat confdefs.h - <<_ACEOF >conftest.$ac_ext | |
12266 | /* end confdefs.h. */ | |
12267 | ||
12268 | #include <libintl.h> | |
12269 | ||
12270 | int | |
12271 | main () | |
12272 | { | |
12273 | return !dgettext ("","") | |
12274 | ; | |
12275 | return 0; | |
12276 | } | |
12277 | _ACEOF | |
12278 | if ac_fn_c_try_link "$LINENO"; then : | |
12279 | gt_cv_func_dgettext_libc=yes | |
12280 | else | |
12281 | gt_cv_func_dgettext_libc=no | |
12282 | fi | |
12283 | rm -f core conftest.err conftest.$ac_objext \ | |
12284 | conftest$ac_exeext conftest.$ac_ext | |
12285 | ||
12286 | fi | |
12287 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_dgettext_libc" >&5 | |
12288 | $as_echo "$gt_cv_func_dgettext_libc" >&6; } | |
12289 | fi | |
12290 | ||
12291 | if test "$gt_cv_func_ngettext_libc" = "yes" ; then | |
12292 | for ac_func in bind_textdomain_codeset | |
12293 | do : | |
12294 | ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" | |
12295 | if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : | |
12296 | cat >>confdefs.h <<_ACEOF | |
12297 | #define HAVE_BIND_TEXTDOMAIN_CODESET 1 | |
12298 | _ACEOF | |
12299 | ||
12300 | fi | |
12301 | done | |
12302 | ||
12303 | fi | |
12304 | ||
12305 | # | |
12306 | # If we don't have everything we want, check in libintl | |
12307 | # | |
12308 | if test "$gt_cv_func_dgettext_libc" != "yes" \ | |
12309 | || test "$gt_cv_func_ngettext_libc" != "yes" \ | |
12310 | || test "$ac_cv_func_bind_textdomain_codeset" != "yes" ; then | |
12311 | ||
12312 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bindtextdomain in -lintl" >&5 | |
12313 | $as_echo_n "checking for bindtextdomain in -lintl... " >&6; } | |
12314 | if ${ac_cv_lib_intl_bindtextdomain+:} false; then : | |
12315 | $as_echo_n "(cached) " >&6 | |
12316 | else | |
12317 | ac_check_lib_save_LIBS=$LIBS | |
12318 | LIBS="-lintl $LIBS" | |
12319 | cat confdefs.h - <<_ACEOF >conftest.$ac_ext | |
12320 | /* end confdefs.h. */ | |
12321 | ||
12322 | /* Override any GCC internal prototype to avoid an error. | |
12323 | Use char because int might match the return type of a GCC | |
12324 | builtin and then its argument prototype would still apply. */ | |
12325 | #ifdef __cplusplus | |
12326 | extern "C" | |
12327 | #endif | |
12328 | char bindtextdomain (); | |
12329 | int | |
12330 | main () | |
12331 | { | |
12332 | return bindtextdomain (); | |
12333 | ; | |
12334 | return 0; | |
12335 | } | |
12336 | _ACEOF | |
12337 | if ac_fn_c_try_link "$LINENO"; then : | |
12338 | ac_cv_lib_intl_bindtextdomain=yes | |
12339 | else | |
12340 | ac_cv_lib_intl_bindtextdomain=no | |
12341 | fi | |
12342 | rm -f core conftest.err conftest.$ac_objext \ | |
12343 | conftest$ac_exeext conftest.$ac_ext | |
12344 | LIBS=$ac_check_lib_save_LIBS | |
12345 | fi | |
12346 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_bindtextdomain" >&5 | |
12347 | $as_echo "$ac_cv_lib_intl_bindtextdomain" >&6; } | |
12348 | if test "x$ac_cv_lib_intl_bindtextdomain" = xyes; then : | |
12349 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 | |
12350 | $as_echo_n "checking for ngettext in -lintl... " >&6; } | |
12351 | if ${ac_cv_lib_intl_ngettext+:} false; then : | |
12352 | $as_echo_n "(cached) " >&6 | |
12353 | else | |
12354 | ac_check_lib_save_LIBS=$LIBS | |
12355 | LIBS="-lintl $LIBS" | |
12356 | cat confdefs.h - <<_ACEOF >conftest.$ac_ext | |
12357 | /* end confdefs.h. */ | |
12358 | ||
12359 | /* Override any GCC internal prototype to avoid an error. | |
12360 | Use char because int might match the return type of a GCC | |
12361 | builtin and then its argument prototype would still apply. */ | |
12362 | #ifdef __cplusplus | |
12363 | extern "C" | |
12364 | #endif | |
12365 | char ngettext (); | |
12366 | int | |
12367 | main () | |
12368 | { | |
12369 | return ngettext (); | |
12370 | ; | |
12371 | return 0; | |
12372 | } | |
12373 | _ACEOF | |
12374 | if ac_fn_c_try_link "$LINENO"; then : | |
12375 | ac_cv_lib_intl_ngettext=yes | |
12376 | else | |
12377 | ac_cv_lib_intl_ngettext=no | |
12378 | fi | |
12379 | rm -f core conftest.err conftest.$ac_objext \ | |
12380 | conftest$ac_exeext conftest.$ac_ext | |
12381 | LIBS=$ac_check_lib_save_LIBS | |
12382 | fi | |
12383 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 | |
12384 | $as_echo "$ac_cv_lib_intl_ngettext" >&6; } | |
12385 | if test "x$ac_cv_lib_intl_ngettext" = xyes; then : | |
12386 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dgettext in -lintl" >&5 | |
12387 | $as_echo_n "checking for dgettext in -lintl... " >&6; } | |
12388 | if ${ac_cv_lib_intl_dgettext+:} false; then : | |
12389 | $as_echo_n "(cached) " >&6 | |
12390 | else | |
12391 | ac_check_lib_save_LIBS=$LIBS | |
12392 | LIBS="-lintl $LIBS" | |
12393 | cat confdefs.h - <<_ACEOF >conftest.$ac_ext | |
12394 | /* end confdefs.h. */ | |
12395 | ||
12396 | /* Override any GCC internal prototype to avoid an error. | |
12397 | Use char because int might match the return type of a GCC | |
12398 | builtin and then its argument prototype would still apply. */ | |
12399 | #ifdef __cplusplus | |
12400 | extern "C" | |
12401 | #endif | |
12402 | char dgettext (); | |
12403 | int | |
12404 | main () | |
12405 | { | |
12406 | return dgettext (); | |
12407 | ; | |
12408 | return 0; | |
12409 | } | |
12410 | _ACEOF | |
12411 | if ac_fn_c_try_link "$LINENO"; then : | |
12412 | ac_cv_lib_intl_dgettext=yes | |
12413 | else | |
12414 | ac_cv_lib_intl_dgettext=no | |
12415 | fi | |
12416 | rm -f core conftest.err conftest.$ac_objext \ | |
12417 | conftest$ac_exeext conftest.$ac_ext | |
12418 | LIBS=$ac_check_lib_save_LIBS | |
12419 | fi | |
12420 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dgettext" >&5 | |
12421 | $as_echo "$ac_cv_lib_intl_dgettext" >&6; } | |
12422 | if test "x$ac_cv_lib_intl_dgettext" = xyes; then : | |
12423 | gt_cv_func_dgettext_libintl=yes | |
12424 | fi | |
12425 | ||
12426 | fi | |
12427 | ||
12428 | fi | |
12429 | ||
12430 | ||
12431 | if test "$gt_cv_func_dgettext_libintl" != "yes" ; then | |
12432 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -liconv is needed to use gettext" >&5 | |
12433 | $as_echo_n "checking if -liconv is needed to use gettext... " >&6; } | |
12434 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: " >&5 | |
12435 | $as_echo "" >&6; } | |
12436 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ngettext in -lintl" >&5 | |
12437 | $as_echo_n "checking for ngettext in -lintl... " >&6; } | |
12438 | if ${ac_cv_lib_intl_ngettext+:} false; then : | |
12439 | $as_echo_n "(cached) " >&6 | |
12440 | else | |
12441 | ac_check_lib_save_LIBS=$LIBS | |
12442 | LIBS="-lintl -liconv $LIBS" | |
12443 | cat confdefs.h - <<_ACEOF >conftest.$ac_ext | |
12444 | /* end confdefs.h. */ | |
12445 | ||
12446 | /* Override any GCC internal prototype to avoid an error. | |
12447 | Use char because int might match the return type of a GCC | |
12448 | builtin and then its argument prototype would still apply. */ | |
12449 | #ifdef __cplusplus | |
12450 | extern "C" | |
12451 | #endif | |
12452 | char ngettext (); | |
12453 | int | |
12454 | main () | |
12455 | { | |
12456 | return ngettext (); | |
12457 | ; | |
12458 | return 0; | |
12459 | } | |
12460 | _ACEOF | |
12461 | if ac_fn_c_try_link "$LINENO"; then : | |
12462 | ac_cv_lib_intl_ngettext=yes | |
12463 | else | |
12464 | ac_cv_lib_intl_ngettext=no | |
12465 | fi | |
12466 | rm -f core conftest.err conftest.$ac_objext \ | |
12467 | conftest$ac_exeext conftest.$ac_ext | |
12468 | LIBS=$ac_check_lib_save_LIBS | |
12469 | fi | |
12470 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_ngettext" >&5 | |
12471 | $as_echo "$ac_cv_lib_intl_ngettext" >&6; } | |
12472 | if test "x$ac_cv_lib_intl_ngettext" = xyes; then : | |
12473 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dcgettext in -lintl" >&5 | |
12474 | $as_echo_n "checking for dcgettext in -lintl... " >&6; } | |
12475 | if ${ac_cv_lib_intl_dcgettext+:} false; then : | |
12476 | $as_echo_n "(cached) " >&6 | |
12477 | else | |
12478 | ac_check_lib_save_LIBS=$LIBS | |
12479 | LIBS="-lintl -liconv $LIBS" | |
12480 | cat confdefs.h - <<_ACEOF >conftest.$ac_ext | |
12481 | /* end confdefs.h. */ | |
12482 | ||
12483 | /* Override any GCC internal prototype to avoid an error. | |
12484 | Use char because int might match the return type of a GCC | |
12485 | builtin and then its argument prototype would still apply. */ | |
12486 | #ifdef __cplusplus | |
12487 | extern "C" | |
12488 | #endif | |
12489 | char dcgettext (); | |
12490 | int | |
12491 | main () | |
12492 | { | |
12493 | return dcgettext (); | |
12494 | ; | |
12495 | return 0; | |
12496 | } | |
12497 | _ACEOF | |
12498 | if ac_fn_c_try_link "$LINENO"; then : | |
12499 | ac_cv_lib_intl_dcgettext=yes | |
12500 | else | |
12501 | ac_cv_lib_intl_dcgettext=no | |
12502 | fi | |
12503 | rm -f core conftest.err conftest.$ac_objext \ | |
12504 | conftest$ac_exeext conftest.$ac_ext | |
12505 | LIBS=$ac_check_lib_save_LIBS | |
12506 | fi | |
12507 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_intl_dcgettext" >&5 | |
12508 | $as_echo "$ac_cv_lib_intl_dcgettext" >&6; } | |
12509 | if test "x$ac_cv_lib_intl_dcgettext" = xyes; then : | |
12510 | gt_cv_func_dgettext_libintl=yes | |
12511 | libintl_extra_libs=-liconv | |
12512 | else | |
12513 | : | |
12514 | fi | |
12515 | ||
12516 | else | |
12517 | : | |
12518 | fi | |
12519 | ||
12520 | fi | |
12521 | ||
12522 | # | |
12523 | # If we found libintl, then check in it for bind_textdomain_codeset(); | |
12524 | # we'll prefer libc if neither have bind_textdomain_codeset(), | |
12525 | # and both have dgettext and ngettext | |
12526 | # | |
12527 | if test "$gt_cv_func_dgettext_libintl" = "yes" ; then | |
12528 | glib_save_LIBS="$LIBS" | |
12529 | LIBS="$LIBS -lintl $libintl_extra_libs" | |
12530 | unset ac_cv_func_bind_textdomain_codeset | |
12531 | for ac_func in bind_textdomain_codeset | |
12532 | do : | |
12533 | ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" | |
12534 | if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : | |
12535 | cat >>confdefs.h <<_ACEOF | |
12536 | #define HAVE_BIND_TEXTDOMAIN_CODESET 1 | |
12537 | _ACEOF | |
12538 | ||
12539 | fi | |
12540 | done | |
12541 | ||
12542 | LIBS="$glib_save_LIBS" | |
12543 | ||
12544 | if test "$ac_cv_func_bind_textdomain_codeset" = "yes" ; then | |
12545 | gt_cv_func_dgettext_libc=no | |
12546 | else | |
12547 | if test "$gt_cv_func_dgettext_libc" = "yes" \ | |
12548 | && test "$gt_cv_func_ngettext_libc" = "yes"; then | |
12549 | gt_cv_func_dgettext_libintl=no | |
12550 | fi | |
12551 | fi | |
12552 | fi | |
12553 | fi | |
12554 | ||
12555 | if test "$gt_cv_func_dgettext_libc" = "yes" \ | |
12556 | || test "$gt_cv_func_dgettext_libintl" = "yes"; then | |
12557 | gt_cv_have_gettext=yes | |
12558 | fi | |
12559 | ||
12560 | if test "$gt_cv_func_dgettext_libintl" = "yes"; then | |
12561 | INTLLIBS="-lintl $libintl_extra_libs" | |
12562 | fi | |
12563 | ||
12564 | if test "$gt_cv_have_gettext" = "yes"; then | |
12565 | ||
12566 | $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h | |
12567 | ||
12568 | # Extract the first word of "msgfmt", so it can be a program name with args. | |
12569 | set dummy msgfmt; ac_word=$2 | |
12570 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
12571 | $as_echo_n "checking for $ac_word... " >&6; } | |
12572 | if ${ac_cv_path_MSGFMT+:} false; then : | |
12573 | $as_echo_n "(cached) " >&6 | |
12574 | else | |
12575 | case "$MSGFMT" in | |
12576 | /*) | |
12577 | ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. | |
12578 | ;; | |
12579 | *) | |
12580 | IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" | |
12581 | for ac_dir in $PATH; do | |
12582 | test -z "$ac_dir" && ac_dir=. | |
12583 | if test -f $ac_dir/$ac_word; then | |
12584 | if test -z "`$ac_dir/$ac_word -h 2>&1 | grep 'dv '`"; then | |
12585 | ac_cv_path_MSGFMT="$ac_dir/$ac_word" | |
12586 | break | |
12587 | fi | |
12588 | fi | |
12589 | done | |
12590 | IFS="$ac_save_ifs" | |
12591 | test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT="no" | |
12592 | ;; | |
12593 | esac | |
12594 | fi | |
12595 | MSGFMT="$ac_cv_path_MSGFMT" | |
12596 | if test "$MSGFMT" != "no"; then | |
12597 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 | |
12598 | $as_echo "$MSGFMT" >&6; } | |
12599 | else | |
12600 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
12601 | $as_echo "no" >&6; } | |
12602 | fi | |
12603 | if test "$MSGFMT" != "no"; then | |
12604 | glib_save_LIBS="$LIBS" | |
12605 | LIBS="$LIBS $INTLLIBS" | |
12606 | for ac_func in dcgettext | |
12607 | do : | |
12608 | ac_fn_c_check_func "$LINENO" "dcgettext" "ac_cv_func_dcgettext" | |
12609 | if test "x$ac_cv_func_dcgettext" = xyes; then : | |
12610 | cat >>confdefs.h <<_ACEOF | |
12611 | #define HAVE_DCGETTEXT 1 | |
12612 | _ACEOF | |
12613 | ||
12614 | fi | |
12615 | done | |
12616 | ||
12617 | MSGFMT_OPTS= | |
12618 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking if msgfmt accepts -c" >&5 | |
12619 | $as_echo_n "checking if msgfmt accepts -c... " >&6; } | |
12620 | cat >conftest.foo <<_ACEOF | |
12621 | ||
12622 | msgid "" | |
12623 | msgstr "" | |
12624 | "Content-Type: text/plain; charset=UTF-8\n" | |
12625 | "Project-Id-Version: test 1.0\n" | |
12626 | "PO-Revision-Date: 2007-02-15 12:01+0100\n" | |
12627 | "Last-Translator: test <foo@bar.xx>\n" | |
12628 | "Language-Team: C <LL@li.org>\n" | |
12629 | "MIME-Version: 1.0\n" | |
12630 | "Content-Transfer-Encoding: 8bit\n" | |
12631 | ||
12632 | _ACEOF | |
12633 | if { { $as_echo "$as_me:${as_lineno-$LINENO}: \$MSGFMT -c -o /dev/null conftest.foo"; } >&5 | |
12634 | ($MSGFMT -c -o /dev/null conftest.foo) 2>&5 | |
12635 | ac_status=$? | |
12636 | $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 | |
12637 | test $ac_status = 0; }; then | |
12638 | MSGFMT_OPTS=-c; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 | |
12639 | $as_echo "yes" >&6; } | |
12640 | else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
12641 | $as_echo "no" >&6; } | |
12642 | echo "$as_me: failed input was:" >&5 | |
12643 | sed 's/^/| /' conftest.foo >&5 | |
12644 | fi | |
12645 | ||
12646 | # Extract the first word of "gmsgfmt", so it can be a program name with args. | |
12647 | set dummy gmsgfmt; ac_word=$2 | |
12648 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
12649 | $as_echo_n "checking for $ac_word... " >&6; } | |
12650 | if ${ac_cv_path_GMSGFMT+:} false; then : | |
12651 | $as_echo_n "(cached) " >&6 | |
12652 | else | |
12653 | case $GMSGFMT in | |
12654 | [\\/]* | ?:[\\/]*) | |
12655 | ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. | |
12656 | ;; | |
12657 | *) | |
12658 | as_save_IFS=$IFS; IFS=$PATH_SEPARATOR | |
12659 | for as_dir in $PATH | |
12660 | do | |
12661 | IFS=$as_save_IFS | |
12662 | test -z "$as_dir" && as_dir=. | |
12663 | for ac_exec_ext in '' $ac_executable_extensions; do | |
12664 | if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then | |
12665 | ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" | |
12666 | $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 | |
12667 | break 2 | |
12668 | fi | |
12669 | done | |
12670 | done | |
12671 | IFS=$as_save_IFS | |
12672 | ||
12673 | test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" | |
12674 | ;; | |
12675 | esac | |
12676 | fi | |
12677 | GMSGFMT=$ac_cv_path_GMSGFMT | |
12678 | if test -n "$GMSGFMT"; then | |
12679 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 | |
12680 | $as_echo "$GMSGFMT" >&6; } | |
12681 | else | |
12682 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
12683 | $as_echo "no" >&6; } | |
12684 | fi | |
12685 | ||
12686 | ||
12687 | # Extract the first word of "xgettext", so it can be a program name with args. | |
12688 | set dummy xgettext; ac_word=$2 | |
12689 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 | |
12690 | $as_echo_n "checking for $ac_word... " >&6; } | |
12691 | if ${ac_cv_path_XGETTEXT+:} false; then : | |
12692 | $as_echo_n "(cached) " >&6 | |
12693 | else | |
12694 | case "$XGETTEXT" in | |
12695 | /*) | |
12696 | ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. | |
12697 | ;; | |
12698 | *) | |
12699 | IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" | |
12700 | for ac_dir in $PATH; do | |
12701 | test -z "$ac_dir" && ac_dir=. | |
12702 | if test -f $ac_dir/$ac_word; then | |
12703 | if test -z "`$ac_dir/$ac_word -h 2>&1 | grep '(HELP)'`"; then | |
12704 | ac_cv_path_XGETTEXT="$ac_dir/$ac_word" | |
12705 | break | |
12706 | fi | |
12707 | fi | |
12708 | done | |
12709 | IFS="$ac_save_ifs" | |
12710 | test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" | |
12711 | ;; | |
12712 | esac | |
12713 | fi | |
12714 | XGETTEXT="$ac_cv_path_XGETTEXT" | |
12715 | if test "$XGETTEXT" != ":"; then | |
12716 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 | |
12717 | $as_echo "$XGETTEXT" >&6; } | |
12718 | else | |
12719 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 | |
12720 | $as_echo "no" >&6; } | |
12721 | fi | |
12722 | ||
12723 | cat confdefs.h - <<_ACEOF >conftest.$ac_ext | |
12724 | /* end confdefs.h. */ | |
12725 | ||
12726 | int | |
12727 | main () | |
12728 | { | |
12729 | extern int _nl_msg_cat_cntr; | |
12730 | return _nl_msg_cat_cntr | |
12731 | ; | |
12732 | return 0; | |
12733 | } | |
12734 | _ACEOF | |
12735 | if ac_fn_c_try_link "$LINENO"; then : | |
12736 | CATOBJEXT=.gmo | |
12737 | DATADIRNAME=share | |
12738 | else | |
12739 | case $host in | |
12740 | *-*-solaris*) | |
12741 | ac_fn_c_check_func "$LINENO" "bind_textdomain_codeset" "ac_cv_func_bind_textdomain_codeset" | |
12742 | if test "x$ac_cv_func_bind_textdomain_codeset" = xyes; then : | |
12743 | CATOBJEXT=.gmo | |
12744 | DATADIRNAME=share | |
12745 | else | |
12746 | CATOBJEXT=.mo | |
12747 | DATADIRNAME=lib | |
12748 | fi | |
12749 | ||
12750 | ;; | |
12751 | *) | |
12752 | CATOBJEXT=.mo | |
12753 | DATADIRNAME=lib | |
12754 | ;; | |
12755 | esac | |
12756 | fi | |
12757 | rm -f core conftest.err conftest.$ac_objext \ | |
12758 | conftest$ac_exeext conftest.$ac_ext | |
12759 | LIBS="$glib_save_LIBS" | |
12760 | INSTOBJEXT=.mo | |
12761 | else | |
12762 | gt_cv_have_gettext=no | |
12763 | fi | |
12764 | fi | |
12765 | ||
12766 | fi | |
12767 | ||
12768 | ||
12769 | ||
12770 | if test "$gt_cv_have_gettext" = "yes" ; then | |
12771 | ||
12772 | $as_echo "#define ENABLE_NLS 1" >>confdefs.h | |
12773 | ||
12774 | fi | |
12775 | ||
12776 | if test "$XGETTEXT" != ":"; then | |
12777 | if $XGETTEXT --omit-header /dev/null 2> /dev/null; then | |
12778 | : ; | |
12779 | else | |
12780 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: found xgettext program is not GNU xgettext; ignore it" >&5 | |
12781 | $as_echo "found xgettext program is not GNU xgettext; ignore it" >&6; } | |
12782 | XGETTEXT=":" | |
12783 | fi | |
12784 | fi | |
12785 | ||
12786 | # We need to process the po/ directory. | |
12787 | POSUB=po | |
12788 | ||
12789 | ac_config_commands="$ac_config_commands default-1" | |
12790 | ||
12791 | ||
12792 | for lang in $ALL_LINGUAS; do | |
12793 | GMOFILES="$GMOFILES $lang.gmo" | |
12794 | POFILES="$POFILES $lang.po" | |
12795 | done | |
12796 | ||
12797 | ||
12798 | ||
12799 | ||
12800 | ||
12801 | ||
12802 | ||
12803 | ||
12804 | ||
12805 | ||
12806 | ||
12807 | ||
12808 | ||
12809 | if test "$gt_cv_have_gettext" = "yes"; then | |
12810 | if test "x$ALL_LINGUAS" = "x"; then | |
12811 | LINGUAS= | |
12812 | else | |
12813 | { $as_echo "$as_me:${as_lineno-$LINENO}: checking for catalogs to be installed" >&5 | |
12814 | $as_echo_n "checking for catalogs to be installed... " >&6; } | |
12815 | NEW_LINGUAS= | |
12816 | for presentlang in $ALL_LINGUAS; do | |
12817 | useit=no | |
12818 | if test "%UNSET%" != "${LINGUAS-%UNSET%}"; then | |
12819 | desiredlanguages="$LINGUAS" | |
12820 | else | |
12821 | desiredlanguages="$ALL_LINGUAS" | |
12822 | fi | |
12823 | for desiredlang in $desiredlanguages; do | |
12824 | # Use the presentlang catalog if desiredlang is | |
12825 | # a. equal to presentlang, or | |
12826 | # b. a variant of presentlang (because in this case, | |
12827 | # presentlang can be used as a fallback for messages | |
12828 | # which are not translated in the desiredlang catalog). | |
12829 | case "$desiredlang" in | |
12830 | "$presentlang"*) useit=yes;; | |
12831 | esac | |
12832 | done | |
12833 | if test $useit = yes; then | |
12834 | NEW_LINGUAS="$NEW_LINGUAS $presentlang" | |
12835 | fi | |
12836 | done | |
12837 | LINGUAS=$NEW_LINGUAS | |
12838 | { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LINGUAS" >&5 | |
12839 | $as_echo "$LINGUAS" >&6; } | |
12840 | fi | |
12841 | ||
12842 | if test -n "$LINGUAS"; then | |
12843 | for lang in $LINGUAS; do CATALOGS="$CATALOGS $lang$CATOBJEXT"; done | |
12844 | fi | |
12845 | fi | |
12846 | ||
12847 | MKINSTALLDIRS= | |
12848 | if test -n "$ac_aux_dir"; then | |
12849 | MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" | |
12850 | fi | |
12851 | if test -z "$MKINSTALLDIRS"; then | |
12852 | MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" | |
12853 | fi | |
12854 | ||
12855 | ||
12856 | test -d po || mkdir po | |
12857 | if test "x$srcdir" != "x."; then | |
12858 | if test "x`echo $srcdir | sed 's@/.*@@'`" = "x"; then | |
12859 | posrcprefix="$srcdir/" | |
12860 | else | |
12861 | posrcprefix="../$srcdir/" | |
12862 | fi | |
12863 | else | |
12864 | posrcprefix="../" | |
12865 | fi | |
12866 | rm -f po/POTFILES | |
12867 | sed -e "/^#/d" -e "/^\$/d" -e "s,.*, $posrcprefix& \\\\," -e "\$s/\(.*\) \\\\/\1/" \ | |
12868 | < $srcdir/po/POTFILES.in > po/POTFILES | |
12869 | ||
12870 | ||
12871 | 12156 | |
12872 | 12157 | |
12873 | 12158 | |
14549 | 13834 | # report actual input values of CONFIG_FILES etc. instead of their |
14550 | 13835 | # values after options handling. |
14551 | 13836 | ac_log=" |
14552 | This file was extended by virt-viewer $as_me 0.4.0, which was | |
13837 | This file was extended by virt-viewer $as_me 0.4.1, which was | |
14553 | 13838 | generated by GNU Autoconf 2.68. Invocation command line was |
14554 | 13839 | |
14555 | 13840 | CONFIG_FILES = $CONFIG_FILES |
14615 | 13900 | cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 |
14616 | 13901 | ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" |
14617 | 13902 | ac_cs_version="\\ |
14618 | virt-viewer config.status 0.4.0 | |
13903 | virt-viewer config.status 0.4.1 | |
14619 | 13904 | configured by $0, generated by GNU Autoconf 2.68, |
14620 | 13905 | with options \\"\$ac_cs_config\\" |
14621 | 13906 | |
15013 | 14298 | |
15014 | 14299 | |
15015 | 14300 | |
15016 | ||
15017 | 14301 | _ACEOF |
15018 | 14302 | |
15019 | 14303 | cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 |
15025 | 14309 | "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; |
15026 | 14310 | "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; |
15027 | 14311 | "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; |
15028 | "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; | |
15029 | 14312 | "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; |
15030 | 14313 | "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; |
15031 | 14314 | "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; |
16355 | 15638 | chmod +x "$ofile" |
16356 | 15639 | |
16357 | 15640 | ;; |
16358 | "default-1":C) case "$CONFIG_FILES" in *po/Makefile.in*) | |
16359 | sed -e "/POTFILES =/r po/POTFILES" po/Makefile.in > po/Makefile | |
16360 | esac ;; | |
16361 | 15641 | "po/stamp-it":C) |
16362 | 15642 | if ! grep "^# INTLTOOL_MAKEFILE$" "po/Makefile.in" > /dev/null ; then |
16363 | 15643 | as_fn_error $? "po/Makefile.in.in was not created by intltoolize." "$LINENO" 5 |
0 | 0 | |
1 | AC_INIT(virt-viewer, 0.4.0) | |
1 | AC_INIT(virt-viewer, 0.4.1) | |
2 | 2 | AC_CONFIG_SRCDIR(src/virt-viewer-main.c) |
3 | 3 | AM_CONFIG_HEADER(config.h) |
4 | 4 | dnl Make automake keep quiet about wildcards & other GNUmake-isms |
32 | 32 | AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [GETTEXT package name]) |
33 | 33 | |
34 | 34 | IT_PROG_INTLTOOL([0.35.0]) |
35 | AM_GLIB_GNU_GETTEXT | |
36 | 35 | |
37 | 36 | |
38 | 37 | PKG_CHECK_MODULES(GLIB2, gmodule-export-2.0 >= $GLIB2_REQUIRED) |
88 | 88 | AUTOHEADER = @AUTOHEADER@ |
89 | 89 | AUTOMAKE = @AUTOMAKE@ |
90 | 90 | AWK = @AWK@ |
91 | CATALOGS = @CATALOGS@ | |
92 | CATOBJEXT = @CATOBJEXT@ | |
93 | 91 | CC = @CC@ |
94 | 92 | CCDEPMODE = @CCDEPMODE@ |
95 | 93 | CFLAGS = @CFLAGS@ |
113 | 111 | GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ |
114 | 112 | GLIB2_CFLAGS = @GLIB2_CFLAGS@ |
115 | 113 | GLIB2_LIBS = @GLIB2_LIBS@ |
116 | GMOFILES = @GMOFILES@ | |
117 | 114 | GMSGFMT = @GMSGFMT@ |
118 | 115 | GREP = @GREP@ |
119 | 116 | GTK_API_VERSION = @GTK_API_VERSION@ |
128 | 125 | INSTALL_PROGRAM = @INSTALL_PROGRAM@ |
129 | 126 | INSTALL_SCRIPT = @INSTALL_SCRIPT@ |
130 | 127 | INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ |
131 | INSTOBJEXT = @INSTOBJEXT@ | |
132 | INTLLIBS = @INTLLIBS@ | |
133 | 128 | INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ |
134 | 129 | INTLTOOL_MERGE = @INTLTOOL_MERGE@ |
135 | 130 | INTLTOOL_PERL = @INTLTOOL_PERL@ |
149 | 144 | MAKEINFO = @MAKEINFO@ |
150 | 145 | MANIFEST_TOOL = @MANIFEST_TOOL@ |
151 | 146 | MKDIR_P = @MKDIR_P@ |
152 | MKINSTALLDIRS = @MKINSTALLDIRS@ | |
153 | 147 | MOZILLA_PLUGIN_CFLAGS = @MOZILLA_PLUGIN_CFLAGS@ |
154 | 148 | MOZILLA_PLUGIN_LIBS = @MOZILLA_PLUGIN_LIBS@ |
155 | 149 | MSGFMT = @MSGFMT@ |
156 | MSGFMT_OPTS = @MSGFMT_OPTS@ | |
157 | 150 | MSGMERGE = @MSGMERGE@ |
158 | 151 | NM = @NM@ |
159 | 152 | NMEDIT = @NMEDIT@ |
174 | 167 | PKG_CONFIG = @PKG_CONFIG@ |
175 | 168 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ |
176 | 169 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ |
177 | POFILES = @POFILES@ | |
178 | POSUB = @POSUB@ | |
179 | PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ | |
180 | PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ | |
181 | 170 | RANLIB = @RANLIB@ |
182 | 171 | SED = @SED@ |
183 | 172 | SET_MAKE = @SET_MAKE@ |
134 | 134 | AUTOHEADER = @AUTOHEADER@ |
135 | 135 | AUTOMAKE = @AUTOMAKE@ |
136 | 136 | AWK = @AWK@ |
137 | CATALOGS = @CATALOGS@ | |
138 | CATOBJEXT = @CATOBJEXT@ | |
139 | 137 | CC = @CC@ |
140 | 138 | CCDEPMODE = @CCDEPMODE@ |
141 | 139 | CFLAGS = @CFLAGS@ |
159 | 157 | GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ |
160 | 158 | GLIB2_CFLAGS = @GLIB2_CFLAGS@ |
161 | 159 | GLIB2_LIBS = @GLIB2_LIBS@ |
162 | GMOFILES = @GMOFILES@ | |
163 | 160 | GMSGFMT = @GMSGFMT@ |
164 | 161 | GREP = @GREP@ |
165 | 162 | GTK_API_VERSION = @GTK_API_VERSION@ |
174 | 171 | INSTALL_PROGRAM = @INSTALL_PROGRAM@ |
175 | 172 | INSTALL_SCRIPT = @INSTALL_SCRIPT@ |
176 | 173 | INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ |
177 | INSTOBJEXT = @INSTOBJEXT@ | |
178 | INTLLIBS = @INTLLIBS@ | |
179 | 174 | INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ |
180 | 175 | INTLTOOL_MERGE = @INTLTOOL_MERGE@ |
181 | 176 | INTLTOOL_PERL = @INTLTOOL_PERL@ |
195 | 190 | MAKEINFO = @MAKEINFO@ |
196 | 191 | MANIFEST_TOOL = @MANIFEST_TOOL@ |
197 | 192 | MKDIR_P = @MKDIR_P@ |
198 | MKINSTALLDIRS = @MKINSTALLDIRS@ | |
199 | 193 | MOZILLA_PLUGIN_CFLAGS = @MOZILLA_PLUGIN_CFLAGS@ |
200 | 194 | MOZILLA_PLUGIN_LIBS = @MOZILLA_PLUGIN_LIBS@ |
201 | 195 | MSGFMT = @MSGFMT@ |
202 | MSGFMT_OPTS = @MSGFMT_OPTS@ | |
203 | 196 | MSGMERGE = @MSGMERGE@ |
204 | 197 | NM = @NM@ |
205 | 198 | NMEDIT = @NMEDIT@ |
220 | 213 | PKG_CONFIG = @PKG_CONFIG@ |
221 | 214 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ |
222 | 215 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ |
223 | POFILES = @POFILES@ | |
224 | POSUB = @POSUB@ | |
225 | PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ | |
226 | PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ | |
227 | 216 | RANLIB = @RANLIB@ |
228 | 217 | SED = @SED@ |
229 | 218 | SET_MAKE = @SET_MAKE@ |
10 | 10 | |
11 | 11 | virt_viewer_SOURCES = \ |
12 | 12 | virt-viewer-main.c \ |
13 | virt-viewer.h virt-viewer.c \ | |
13 | 14 | virt-viewer-util.h virt-viewer-util.c \ |
14 | 15 | virt-viewer-auth.h virt-viewer-auth.c \ |
15 | 16 | virt-viewer-events.h virt-viewer-events.c \ |
16 | virt-viewer.h virt-viewer.c \ | |
17 | virt-viewer-app.h virt-viewer-app.c \ | |
17 | 18 | virt-viewer-session.h virt-viewer-session.c \ |
18 | 19 | virt-viewer-session-vnc.h virt-viewer-session-vnc.c \ |
19 | 20 | virt-viewer-display.h virt-viewer-display.c \ |
20 | 21 | virt-viewer-display-vnc.h virt-viewer-display-vnc.c \ |
22 | virt-viewer-notebook.h virt-viewer-notebook.c \ | |
23 | virt-viewer-window.h virt-viewer-window.c \ | |
21 | 24 | view/autoDrawer.c \ |
22 | 25 | view/autoDrawer.h \ |
23 | 26 | view/drawer.c \ |
54 | 54 | CONFIG_CLEAN_VPATH_FILES = |
55 | 55 | am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(builderxmldir)" |
56 | 56 | PROGRAMS = $(bin_PROGRAMS) |
57 | am__virt_viewer_SOURCES_DIST = virt-viewer-main.c virt-viewer-util.h \ | |
58 | virt-viewer-util.c virt-viewer-auth.h virt-viewer-auth.c \ | |
59 | virt-viewer-events.h virt-viewer-events.c virt-viewer.h \ | |
60 | virt-viewer.c virt-viewer-session.h virt-viewer-session.c \ | |
57 | am__virt_viewer_SOURCES_DIST = virt-viewer-main.c virt-viewer.h \ | |
58 | virt-viewer.c virt-viewer-util.h virt-viewer-util.c \ | |
59 | virt-viewer-auth.h virt-viewer-auth.c virt-viewer-events.h \ | |
60 | virt-viewer-events.c virt-viewer-app.h virt-viewer-app.c \ | |
61 | virt-viewer-session.h virt-viewer-session.c \ | |
61 | 62 | virt-viewer-session-vnc.h virt-viewer-session-vnc.c \ |
62 | 63 | virt-viewer-display.h virt-viewer-display.c \ |
63 | 64 | virt-viewer-display-vnc.h virt-viewer-display-vnc.c \ |
64 | view/autoDrawer.c view/autoDrawer.h view/drawer.c \ | |
65 | view/drawer.h view/ovBox.c view/ovBox.h \ | |
66 | virt-viewer-session-spice.h virt-viewer-session-spice.c \ | |
67 | virt-viewer-display-spice.h virt-viewer-display-spice.c | |
65 | virt-viewer-notebook.h virt-viewer-notebook.c \ | |
66 | virt-viewer-window.h virt-viewer-window.c view/autoDrawer.c \ | |
67 | view/autoDrawer.h view/drawer.c view/drawer.h view/ovBox.c \ | |
68 | view/ovBox.h virt-viewer-session-spice.h \ | |
69 | virt-viewer-session-spice.c virt-viewer-display-spice.h \ | |
70 | virt-viewer-display-spice.c | |
68 | 71 | @HAVE_SPICE_GTK_TRUE@am__objects_1 = virt_viewer-virt-viewer-session-spice.$(OBJEXT) \ |
69 | 72 | @HAVE_SPICE_GTK_TRUE@ virt_viewer-virt-viewer-display-spice.$(OBJEXT) |
70 | 73 | am_virt_viewer_OBJECTS = virt_viewer-virt-viewer-main.$(OBJEXT) \ |
74 | virt_viewer-virt-viewer.$(OBJEXT) \ | |
71 | 75 | virt_viewer-virt-viewer-util.$(OBJEXT) \ |
72 | 76 | virt_viewer-virt-viewer-auth.$(OBJEXT) \ |
73 | 77 | virt_viewer-virt-viewer-events.$(OBJEXT) \ |
74 | virt_viewer-virt-viewer.$(OBJEXT) \ | |
78 | virt_viewer-virt-viewer-app.$(OBJEXT) \ | |
75 | 79 | virt_viewer-virt-viewer-session.$(OBJEXT) \ |
76 | 80 | virt_viewer-virt-viewer-session-vnc.$(OBJEXT) \ |
77 | 81 | virt_viewer-virt-viewer-display.$(OBJEXT) \ |
78 | 82 | virt_viewer-virt-viewer-display-vnc.$(OBJEXT) \ |
83 | virt_viewer-virt-viewer-notebook.$(OBJEXT) \ | |
84 | virt_viewer-virt-viewer-window.$(OBJEXT) \ | |
79 | 85 | virt_viewer-autoDrawer.$(OBJEXT) virt_viewer-drawer.$(OBJEXT) \ |
80 | 86 | virt_viewer-ovBox.$(OBJEXT) $(am__objects_1) |
81 | 87 | virt_viewer_OBJECTS = $(am_virt_viewer_OBJECTS) |
148 | 154 | AUTOHEADER = @AUTOHEADER@ |
149 | 155 | AUTOMAKE = @AUTOMAKE@ |
150 | 156 | AWK = @AWK@ |
151 | CATALOGS = @CATALOGS@ | |
152 | CATOBJEXT = @CATOBJEXT@ | |
153 | 157 | CC = @CC@ |
154 | 158 | CCDEPMODE = @CCDEPMODE@ |
155 | 159 | CFLAGS = @CFLAGS@ |
173 | 177 | GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ |
174 | 178 | GLIB2_CFLAGS = @GLIB2_CFLAGS@ |
175 | 179 | GLIB2_LIBS = @GLIB2_LIBS@ |
176 | GMOFILES = @GMOFILES@ | |
177 | 180 | GMSGFMT = @GMSGFMT@ |
178 | 181 | GREP = @GREP@ |
179 | 182 | GTK_API_VERSION = @GTK_API_VERSION@ |
188 | 191 | INSTALL_PROGRAM = @INSTALL_PROGRAM@ |
189 | 192 | INSTALL_SCRIPT = @INSTALL_SCRIPT@ |
190 | 193 | INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ |
191 | INSTOBJEXT = @INSTOBJEXT@ | |
192 | INTLLIBS = @INTLLIBS@ | |
193 | 194 | INTLTOOL_EXTRACT = @INTLTOOL_EXTRACT@ |
194 | 195 | INTLTOOL_MERGE = @INTLTOOL_MERGE@ |
195 | 196 | INTLTOOL_PERL = @INTLTOOL_PERL@ |
209 | 210 | MAKEINFO = @MAKEINFO@ |
210 | 211 | MANIFEST_TOOL = @MANIFEST_TOOL@ |
211 | 212 | MKDIR_P = @MKDIR_P@ |
212 | MKINSTALLDIRS = @MKINSTALLDIRS@ | |
213 | 213 | MOZILLA_PLUGIN_CFLAGS = @MOZILLA_PLUGIN_CFLAGS@ |
214 | 214 | MOZILLA_PLUGIN_LIBS = @MOZILLA_PLUGIN_LIBS@ |
215 | 215 | MSGFMT = @MSGFMT@ |
216 | MSGFMT_OPTS = @MSGFMT_OPTS@ | |
217 | 216 | MSGMERGE = @MSGMERGE@ |
218 | 217 | NM = @NM@ |
219 | 218 | NMEDIT = @NMEDIT@ |
234 | 233 | PKG_CONFIG = @PKG_CONFIG@ |
235 | 234 | PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ |
236 | 235 | PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ |
237 | POFILES = @POFILES@ | |
238 | POSUB = @POSUB@ | |
239 | PO_IN_DATADIR_FALSE = @PO_IN_DATADIR_FALSE@ | |
240 | PO_IN_DATADIR_TRUE = @PO_IN_DATADIR_TRUE@ | |
241 | 236 | RANLIB = @RANLIB@ |
242 | 237 | SED = @SED@ |
243 | 238 | SET_MAKE = @SET_MAKE@ |
308 | 303 | virt-viewer-auth.xml |
309 | 304 | |
310 | 305 | EXTRA_DIST = $(builderxml_DATA) |
311 | virt_viewer_SOURCES = virt-viewer-main.c virt-viewer-util.h \ | |
312 | virt-viewer-util.c virt-viewer-auth.h virt-viewer-auth.c \ | |
313 | virt-viewer-events.h virt-viewer-events.c virt-viewer.h \ | |
314 | virt-viewer.c virt-viewer-session.h virt-viewer-session.c \ | |
315 | virt-viewer-session-vnc.h virt-viewer-session-vnc.c \ | |
316 | virt-viewer-display.h virt-viewer-display.c \ | |
317 | virt-viewer-display-vnc.h virt-viewer-display-vnc.c \ | |
318 | view/autoDrawer.c view/autoDrawer.h view/drawer.c \ | |
319 | view/drawer.h view/ovBox.c view/ovBox.h $(am__append_1) | |
306 | virt_viewer_SOURCES = virt-viewer-main.c virt-viewer.h virt-viewer.c \ | |
307 | virt-viewer-util.h virt-viewer-util.c virt-viewer-auth.h \ | |
308 | virt-viewer-auth.c virt-viewer-events.h virt-viewer-events.c \ | |
309 | virt-viewer-app.h virt-viewer-app.c virt-viewer-session.h \ | |
310 | virt-viewer-session.c virt-viewer-session-vnc.h \ | |
311 | virt-viewer-session-vnc.c virt-viewer-display.h \ | |
312 | virt-viewer-display.c virt-viewer-display-vnc.h \ | |
313 | virt-viewer-display-vnc.c virt-viewer-notebook.h \ | |
314 | virt-viewer-notebook.c virt-viewer-window.h \ | |
315 | virt-viewer-window.c view/autoDrawer.c view/autoDrawer.h \ | |
316 | view/drawer.c view/drawer.h view/ovBox.c view/ovBox.h \ | |
317 | $(am__append_1) | |
320 | 318 | virt_viewer_LDADD = \ |
321 | 319 | @GTK_VNC_LIBS@ \ |
322 | 320 | @SPICE_GTK_LIBS@ \ |
426 | 424 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-autoDrawer.Po@am__quote@ |
427 | 425 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-drawer.Po@am__quote@ |
428 | 426 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-ovBox.Po@am__quote@ |
427 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-virt-viewer-app.Po@am__quote@ | |
429 | 428 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-virt-viewer-auth.Po@am__quote@ |
430 | 429 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-virt-viewer-display-spice.Po@am__quote@ |
431 | 430 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-virt-viewer-display-vnc.Po@am__quote@ |
432 | 431 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-virt-viewer-display.Po@am__quote@ |
433 | 432 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-virt-viewer-events.Po@am__quote@ |
434 | 433 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-virt-viewer-main.Po@am__quote@ |
434 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-virt-viewer-notebook.Po@am__quote@ | |
435 | 435 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-virt-viewer-session-spice.Po@am__quote@ |
436 | 436 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-virt-viewer-session-vnc.Po@am__quote@ |
437 | 437 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-virt-viewer-session.Po@am__quote@ |
438 | 438 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-virt-viewer-util.Po@am__quote@ |
439 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-virt-viewer-window.Po@am__quote@ | |
439 | 440 | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virt_viewer-virt-viewer.Po@am__quote@ |
440 | 441 | |
441 | 442 | .c.o: |
478 | 479 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
479 | 480 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -c -o virt_viewer-virt-viewer-main.obj `if test -f 'virt-viewer-main.c'; then $(CYGPATH_W) 'virt-viewer-main.c'; else $(CYGPATH_W) '$(srcdir)/virt-viewer-main.c'; fi` |
480 | 481 | |
482 | virt_viewer-virt-viewer.o: virt-viewer.c | |
483 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -MT virt_viewer-virt-viewer.o -MD -MP -MF $(DEPDIR)/virt_viewer-virt-viewer.Tpo -c -o virt_viewer-virt-viewer.o `test -f 'virt-viewer.c' || echo '$(srcdir)/'`virt-viewer.c | |
484 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/virt_viewer-virt-viewer.Tpo $(DEPDIR)/virt_viewer-virt-viewer.Po | |
485 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
486 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='virt-viewer.c' object='virt_viewer-virt-viewer.o' libtool=no @AMDEPBACKSLASH@ | |
487 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
488 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -c -o virt_viewer-virt-viewer.o `test -f 'virt-viewer.c' || echo '$(srcdir)/'`virt-viewer.c | |
489 | ||
490 | virt_viewer-virt-viewer.obj: virt-viewer.c | |
491 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -MT virt_viewer-virt-viewer.obj -MD -MP -MF $(DEPDIR)/virt_viewer-virt-viewer.Tpo -c -o virt_viewer-virt-viewer.obj `if test -f 'virt-viewer.c'; then $(CYGPATH_W) 'virt-viewer.c'; else $(CYGPATH_W) '$(srcdir)/virt-viewer.c'; fi` | |
492 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/virt_viewer-virt-viewer.Tpo $(DEPDIR)/virt_viewer-virt-viewer.Po | |
493 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
494 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='virt-viewer.c' object='virt_viewer-virt-viewer.obj' libtool=no @AMDEPBACKSLASH@ | |
495 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
496 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -c -o virt_viewer-virt-viewer.obj `if test -f 'virt-viewer.c'; then $(CYGPATH_W) 'virt-viewer.c'; else $(CYGPATH_W) '$(srcdir)/virt-viewer.c'; fi` | |
497 | ||
481 | 498 | virt_viewer-virt-viewer-util.o: virt-viewer-util.c |
482 | 499 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -MT virt_viewer-virt-viewer-util.o -MD -MP -MF $(DEPDIR)/virt_viewer-virt-viewer-util.Tpo -c -o virt_viewer-virt-viewer-util.o `test -f 'virt-viewer-util.c' || echo '$(srcdir)/'`virt-viewer-util.c |
483 | 500 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/virt_viewer-virt-viewer-util.Tpo $(DEPDIR)/virt_viewer-virt-viewer-util.Po |
526 | 543 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
527 | 544 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -c -o virt_viewer-virt-viewer-events.obj `if test -f 'virt-viewer-events.c'; then $(CYGPATH_W) 'virt-viewer-events.c'; else $(CYGPATH_W) '$(srcdir)/virt-viewer-events.c'; fi` |
528 | 545 | |
529 | virt_viewer-virt-viewer.o: virt-viewer.c | |
530 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -MT virt_viewer-virt-viewer.o -MD -MP -MF $(DEPDIR)/virt_viewer-virt-viewer.Tpo -c -o virt_viewer-virt-viewer.o `test -f 'virt-viewer.c' || echo '$(srcdir)/'`virt-viewer.c | |
531 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/virt_viewer-virt-viewer.Tpo $(DEPDIR)/virt_viewer-virt-viewer.Po | |
532 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
533 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='virt-viewer.c' object='virt_viewer-virt-viewer.o' libtool=no @AMDEPBACKSLASH@ | |
534 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
535 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -c -o virt_viewer-virt-viewer.o `test -f 'virt-viewer.c' || echo '$(srcdir)/'`virt-viewer.c | |
536 | ||
537 | virt_viewer-virt-viewer.obj: virt-viewer.c | |
538 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -MT virt_viewer-virt-viewer.obj -MD -MP -MF $(DEPDIR)/virt_viewer-virt-viewer.Tpo -c -o virt_viewer-virt-viewer.obj `if test -f 'virt-viewer.c'; then $(CYGPATH_W) 'virt-viewer.c'; else $(CYGPATH_W) '$(srcdir)/virt-viewer.c'; fi` | |
539 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/virt_viewer-virt-viewer.Tpo $(DEPDIR)/virt_viewer-virt-viewer.Po | |
540 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
541 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='virt-viewer.c' object='virt_viewer-virt-viewer.obj' libtool=no @AMDEPBACKSLASH@ | |
542 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
543 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -c -o virt_viewer-virt-viewer.obj `if test -f 'virt-viewer.c'; then $(CYGPATH_W) 'virt-viewer.c'; else $(CYGPATH_W) '$(srcdir)/virt-viewer.c'; fi` | |
546 | virt_viewer-virt-viewer-app.o: virt-viewer-app.c | |
547 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -MT virt_viewer-virt-viewer-app.o -MD -MP -MF $(DEPDIR)/virt_viewer-virt-viewer-app.Tpo -c -o virt_viewer-virt-viewer-app.o `test -f 'virt-viewer-app.c' || echo '$(srcdir)/'`virt-viewer-app.c | |
548 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/virt_viewer-virt-viewer-app.Tpo $(DEPDIR)/virt_viewer-virt-viewer-app.Po | |
549 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
550 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='virt-viewer-app.c' object='virt_viewer-virt-viewer-app.o' libtool=no @AMDEPBACKSLASH@ | |
551 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
552 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -c -o virt_viewer-virt-viewer-app.o `test -f 'virt-viewer-app.c' || echo '$(srcdir)/'`virt-viewer-app.c | |
553 | ||
554 | virt_viewer-virt-viewer-app.obj: virt-viewer-app.c | |
555 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -MT virt_viewer-virt-viewer-app.obj -MD -MP -MF $(DEPDIR)/virt_viewer-virt-viewer-app.Tpo -c -o virt_viewer-virt-viewer-app.obj `if test -f 'virt-viewer-app.c'; then $(CYGPATH_W) 'virt-viewer-app.c'; else $(CYGPATH_W) '$(srcdir)/virt-viewer-app.c'; fi` | |
556 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/virt_viewer-virt-viewer-app.Tpo $(DEPDIR)/virt_viewer-virt-viewer-app.Po | |
557 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
558 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='virt-viewer-app.c' object='virt_viewer-virt-viewer-app.obj' libtool=no @AMDEPBACKSLASH@ | |
559 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
560 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -c -o virt_viewer-virt-viewer-app.obj `if test -f 'virt-viewer-app.c'; then $(CYGPATH_W) 'virt-viewer-app.c'; else $(CYGPATH_W) '$(srcdir)/virt-viewer-app.c'; fi` | |
544 | 561 | |
545 | 562 | virt_viewer-virt-viewer-session.o: virt-viewer-session.c |
546 | 563 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -MT virt_viewer-virt-viewer-session.o -MD -MP -MF $(DEPDIR)/virt_viewer-virt-viewer-session.Tpo -c -o virt_viewer-virt-viewer-session.o `test -f 'virt-viewer-session.c' || echo '$(srcdir)/'`virt-viewer-session.c |
605 | 622 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='virt-viewer-display-vnc.c' object='virt_viewer-virt-viewer-display-vnc.obj' libtool=no @AMDEPBACKSLASH@ |
606 | 623 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ |
607 | 624 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -c -o virt_viewer-virt-viewer-display-vnc.obj `if test -f 'virt-viewer-display-vnc.c'; then $(CYGPATH_W) 'virt-viewer-display-vnc.c'; else $(CYGPATH_W) '$(srcdir)/virt-viewer-display-vnc.c'; fi` |
625 | ||
626 | virt_viewer-virt-viewer-notebook.o: virt-viewer-notebook.c | |
627 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -MT virt_viewer-virt-viewer-notebook.o -MD -MP -MF $(DEPDIR)/virt_viewer-virt-viewer-notebook.Tpo -c -o virt_viewer-virt-viewer-notebook.o `test -f 'virt-viewer-notebook.c' || echo '$(srcdir)/'`virt-viewer-notebook.c | |
628 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/virt_viewer-virt-viewer-notebook.Tpo $(DEPDIR)/virt_viewer-virt-viewer-notebook.Po | |
629 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
630 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='virt-viewer-notebook.c' object='virt_viewer-virt-viewer-notebook.o' libtool=no @AMDEPBACKSLASH@ | |
631 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
632 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -c -o virt_viewer-virt-viewer-notebook.o `test -f 'virt-viewer-notebook.c' || echo '$(srcdir)/'`virt-viewer-notebook.c | |
633 | ||
634 | virt_viewer-virt-viewer-notebook.obj: virt-viewer-notebook.c | |
635 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -MT virt_viewer-virt-viewer-notebook.obj -MD -MP -MF $(DEPDIR)/virt_viewer-virt-viewer-notebook.Tpo -c -o virt_viewer-virt-viewer-notebook.obj `if test -f 'virt-viewer-notebook.c'; then $(CYGPATH_W) 'virt-viewer-notebook.c'; else $(CYGPATH_W) '$(srcdir)/virt-viewer-notebook.c'; fi` | |
636 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/virt_viewer-virt-viewer-notebook.Tpo $(DEPDIR)/virt_viewer-virt-viewer-notebook.Po | |
637 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
638 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='virt-viewer-notebook.c' object='virt_viewer-virt-viewer-notebook.obj' libtool=no @AMDEPBACKSLASH@ | |
639 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
640 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -c -o virt_viewer-virt-viewer-notebook.obj `if test -f 'virt-viewer-notebook.c'; then $(CYGPATH_W) 'virt-viewer-notebook.c'; else $(CYGPATH_W) '$(srcdir)/virt-viewer-notebook.c'; fi` | |
641 | ||
642 | virt_viewer-virt-viewer-window.o: virt-viewer-window.c | |
643 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -MT virt_viewer-virt-viewer-window.o -MD -MP -MF $(DEPDIR)/virt_viewer-virt-viewer-window.Tpo -c -o virt_viewer-virt-viewer-window.o `test -f 'virt-viewer-window.c' || echo '$(srcdir)/'`virt-viewer-window.c | |
644 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/virt_viewer-virt-viewer-window.Tpo $(DEPDIR)/virt_viewer-virt-viewer-window.Po | |
645 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
646 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='virt-viewer-window.c' object='virt_viewer-virt-viewer-window.o' libtool=no @AMDEPBACKSLASH@ | |
647 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
648 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -c -o virt_viewer-virt-viewer-window.o `test -f 'virt-viewer-window.c' || echo '$(srcdir)/'`virt-viewer-window.c | |
649 | ||
650 | virt_viewer-virt-viewer-window.obj: virt-viewer-window.c | |
651 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -MT virt_viewer-virt-viewer-window.obj -MD -MP -MF $(DEPDIR)/virt_viewer-virt-viewer-window.Tpo -c -o virt_viewer-virt-viewer-window.obj `if test -f 'virt-viewer-window.c'; then $(CYGPATH_W) 'virt-viewer-window.c'; else $(CYGPATH_W) '$(srcdir)/virt-viewer-window.c'; fi` | |
652 | @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/virt_viewer-virt-viewer-window.Tpo $(DEPDIR)/virt_viewer-virt-viewer-window.Po | |
653 | @am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ | |
654 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='virt-viewer-window.c' object='virt_viewer-virt-viewer-window.obj' libtool=no @AMDEPBACKSLASH@ | |
655 | @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ | |
656 | @am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -c -o virt_viewer-virt-viewer-window.obj `if test -f 'virt-viewer-window.c'; then $(CYGPATH_W) 'virt-viewer-window.c'; else $(CYGPATH_W) '$(srcdir)/virt-viewer-window.c'; fi` | |
608 | 657 | |
609 | 658 | virt_viewer-autoDrawer.o: view/autoDrawer.c |
610 | 659 | @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(virt_viewer_CFLAGS) $(CFLAGS) -MT virt_viewer-autoDrawer.o -MD -MP -MF $(DEPDIR)/virt_viewer-autoDrawer.Tpo -c -o virt_viewer-autoDrawer.o `test -f 'view/autoDrawer.c' || echo '$(srcdir)/'`view/autoDrawer.c |
8 | 8 | <property name="window_position">center-on-parent</property> |
9 | 9 | <property name="type_hint">dialog</property> |
10 | 10 | <property name="program_name">Virtual Machine Viewer</property> |
11 | <property name="copyright" translatable="yes">Copyright 2007-2008 Daniel P. Berrange | |
12 | Copyright 2007-2008 Red Hat, Inc.</property> | |
13 | <property name="comments" translatable="yes">A remote desktop client built with GTK-VNC and libvirt</property> | |
11 | <property name="copyright" translatable="yes">Copyright 2007-2011 Daniel P. Berrange | |
12 | Copyright 2007-2011 Red Hat, Inc.</property> | |
13 | <property name="comments" translatable="yes">A remote desktop client built with GTK-VNC, SPICE-GTK and libvirt</property> | |
14 | 14 | <property name="website">http://virt-manager.org/</property> |
15 | 15 | <property name="website_label" translatable="yes">virt-manager.org</property> |
16 | 16 | <property name="license" translatable="yes">This program is free software; you can redistribute it and/or modify |
27 | 27 | along with this program; if not, write to the Free Software |
28 | 28 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
29 | 29 | </property> |
30 | <property name="authors">Daniel P. Berrange</property> | |
30 | <property name="authors">Daniel P. Berrange | |
31 | Marc-André Lureau | |
32 | </property> | |
31 | 33 | <property name="translator_credits" translatable="yes">The Fedora Translation Team</property> |
32 | <signal name="response" handler="virt_viewer_about_close"/> | |
33 | <signal name="delete_event" handler="virt_viewer_about_delete"/> | |
34 | <signal name="response" handler="virt_viewer_app_about_close"/> | |
35 | <signal name="delete_event" handler="virt_viewer_app_about_delete"/> | |
34 | 36 | <child internal-child="vbox"> |
35 | 37 | <object class="GtkVBox" id="dialog-vbox1"> |
36 | 38 | <property name="visible">True</property> |
0 | /* | |
1 | * Virt Viewer: A virtual machine console viewer | |
2 | * | |
3 | * Copyright (C) 2007-2009 Red Hat, | |
4 | * Copyright (C) 2009 Daniel P. Berrange | |
5 | * Copyright (C) 2010 Marc-André Lureau | |
6 | * | |
7 | * This program is free software; you can redistribute it and/or modify | |
8 | * it under the terms of the GNU General Public License as published by | |
9 | * the Free Software Foundation; either version 2 of the License, or | |
10 | * (at your option) any later version. | |
11 | * | |
12 | * This program is distributed in the hope that it will be useful, | |
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | * GNU General Public License for more details. | |
16 | * | |
17 | * You should have received a copy of the GNU General Public License | |
18 | * along with this program; if not, write to the Free Software | |
19 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
20 | * | |
21 | * Author: Daniel P. Berrange <berrange@redhat.com> | |
22 | */ | |
23 | ||
24 | #include <config.h> | |
25 | ||
26 | #include <gdk/gdkkeysyms.h> | |
27 | #include <gtk/gtk.h> | |
28 | #include <sys/types.h> | |
29 | #include <sys/stat.h> | |
30 | #include <stdlib.h> | |
31 | #include <string.h> | |
32 | #include <unistd.h> | |
33 | #include <locale.h> | |
34 | #include <glib/gprintf.h> | |
35 | #include <glib/gi18n.h> | |
36 | ||
37 | #include <libxml/xpath.h> | |
38 | #include <libxml/uri.h> | |
39 | ||
40 | #ifdef HAVE_SYS_SOCKET_H | |
41 | #include <sys/socket.h> | |
42 | #endif | |
43 | ||
44 | #ifdef HAVE_SYS_UN_H | |
45 | #include <sys/un.h> | |
46 | #endif | |
47 | ||
48 | #ifdef HAVE_WINDOWS_H | |
49 | #include <windows.h> | |
50 | #endif | |
51 | ||
52 | #include "virt-viewer-app.h" | |
53 | #include "virt-viewer-auth.h" | |
54 | #include "virt-viewer-window.h" | |
55 | #include "virt-viewer-session.h" | |
56 | #include "virt-viewer-session-vnc.h" | |
57 | #ifdef HAVE_SPICE_GTK | |
58 | #include "virt-viewer-session-spice.h" | |
59 | #endif | |
60 | ||
61 | gboolean doDebug = FALSE; | |
62 | ||
63 | /* Signal handlers for about dialog */ | |
64 | void virt_viewer_app_about_close(GtkWidget *dialog, VirtViewerApp *self); | |
65 | void virt_viewer_app_about_delete(GtkWidget *dialog, void *dummy, VirtViewerApp *self); | |
66 | ||
67 | ||
68 | /* Internal methods */ | |
69 | static void virt_viewer_app_connected(VirtViewerSession *session, | |
70 | VirtViewerApp *self); | |
71 | static void virt_viewer_app_initialized(VirtViewerSession *session, | |
72 | VirtViewerApp *self); | |
73 | static void virt_viewer_app_disconnected(VirtViewerSession *session, | |
74 | VirtViewerApp *self); | |
75 | static void virt_viewer_app_auth_refused(VirtViewerSession *session, | |
76 | const char *msg, | |
77 | VirtViewerApp *self); | |
78 | static void virt_viewer_app_auth_failed(VirtViewerSession *session, | |
79 | const char *msg, | |
80 | VirtViewerApp *self); | |
81 | ||
82 | static void virt_viewer_app_server_cut_text(VirtViewerSession *session, | |
83 | const gchar *text, | |
84 | VirtViewerApp *self); | |
85 | static void virt_viewer_app_bell(VirtViewerSession *session, | |
86 | VirtViewerApp *self); | |
87 | ||
88 | static void virt_viewer_app_channel_open(VirtViewerSession *session, | |
89 | VirtViewerSessionChannel *channel, | |
90 | VirtViewerApp *self); | |
91 | static void virt_viewer_app_update_pretty_address(VirtViewerApp *self); | |
92 | static void virt_viewer_app_set_fullscreen(VirtViewerApp *self, gboolean fullscreen); | |
93 | static void virt_viewer_app_update_menu_displays(VirtViewerApp *self); | |
94 | ||
95 | ||
96 | struct _VirtViewerAppPrivate { | |
97 | VirtViewerWindow *main_window; | |
98 | GtkWidget *main_notebook; | |
99 | GtkWidget *container; | |
100 | GHashTable *windows; | |
101 | gchar *clipboard; | |
102 | ||
103 | gboolean direct; | |
104 | gboolean verbose; | |
105 | gboolean authretry; | |
106 | gboolean started; | |
107 | gboolean fullscreen; | |
108 | ||
109 | VirtViewerSession *session; | |
110 | gboolean active; | |
111 | gboolean connected; | |
112 | guint reconnect_poll; /* source id */ | |
113 | char *unixsock; | |
114 | char *ghost; | |
115 | char *gport; | |
116 | char *host; /* ssh */ | |
117 | int port;/* ssh */ | |
118 | char *user; /* ssh */ | |
119 | char *transport; | |
120 | char *pretty_address; | |
121 | gchar *guest_name; | |
122 | gboolean grabbed; | |
123 | }; | |
124 | ||
125 | ||
126 | G_DEFINE_ABSTRACT_TYPE(VirtViewerApp, virt_viewer_app, G_TYPE_OBJECT) | |
127 | #define GET_PRIVATE(o) \ | |
128 | (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIRT_VIEWER_TYPE_APP, VirtViewerAppPrivate)) | |
129 | ||
130 | enum { | |
131 | PROP_0, | |
132 | PROP_VERBOSE, | |
133 | PROP_CONTAINER, | |
134 | PROP_SESSION, | |
135 | PROP_GUEST_NAME, | |
136 | PROP_FULLSCREEN, | |
137 | }; | |
138 | ||
139 | void | |
140 | virt_viewer_app_set_debug(gboolean debug) | |
141 | { | |
142 | doDebug = debug; | |
143 | } | |
144 | ||
145 | void | |
146 | virt_viewer_app_simple_message_dialog(VirtViewerApp *self, | |
147 | const char *fmt, ...) | |
148 | { | |
149 | g_return_if_fail(VIRT_VIEWER_IS_APP(self)); | |
150 | GtkWindow *window = GTK_WINDOW(virt_viewer_window_get_window(self->priv->main_window)); | |
151 | GtkWidget *dialog; | |
152 | char *msg; | |
153 | va_list vargs; | |
154 | ||
155 | va_start(vargs, fmt); | |
156 | ||
157 | msg = g_strdup_vprintf(fmt, vargs); | |
158 | ||
159 | va_end(vargs); | |
160 | ||
161 | dialog = gtk_message_dialog_new(window, | |
162 | GTK_DIALOG_MODAL | | |
163 | GTK_DIALOG_DESTROY_WITH_PARENT, | |
164 | GTK_MESSAGE_ERROR, | |
165 | GTK_BUTTONS_OK, | |
166 | "%s", | |
167 | msg); | |
168 | ||
169 | gtk_dialog_run(GTK_DIALOG(dialog)); | |
170 | ||
171 | gtk_widget_destroy(dialog); | |
172 | ||
173 | g_free(msg); | |
174 | } | |
175 | ||
176 | void | |
177 | virt_viewer_app_quit(VirtViewerApp *self) | |
178 | { | |
179 | g_return_if_fail(VIRT_VIEWER_IS_APP(self)); | |
180 | VirtViewerAppPrivate *priv = self->priv; | |
181 | ||
182 | if (priv->session) | |
183 | virt_viewer_session_close(VIRT_VIEWER_SESSION(priv->session)); | |
184 | gtk_main_quit(); | |
185 | } | |
186 | ||
187 | static void count_window_visible(gpointer key G_GNUC_UNUSED, | |
188 | gpointer value, | |
189 | gpointer user_data) | |
190 | { | |
191 | GtkWindow *win = virt_viewer_window_get_window(VIRT_VIEWER_WINDOW(value)); | |
192 | guint *n = (guint*)user_data; | |
193 | ||
194 | if (gtk_widget_get_visible(GTK_WIDGET(win))) | |
195 | *n += 1; | |
196 | } | |
197 | ||
198 | static guint | |
199 | virt_viewer_app_get_n_windows_visible(VirtViewerApp *self) | |
200 | { | |
201 | guint n = 0; | |
202 | g_hash_table_foreach(self->priv->windows, count_window_visible, &n); | |
203 | return n; | |
204 | } | |
205 | ||
206 | static guint | |
207 | virt_viewer_app_get_n_windows(VirtViewerApp *self) | |
208 | { | |
209 | return g_hash_table_size(self->priv->windows); | |
210 | } | |
211 | ||
212 | gboolean | |
213 | virt_viewer_app_window_set_visible(VirtViewerApp *self, | |
214 | VirtViewerWindow *vwin, | |
215 | gboolean visible) | |
216 | { | |
217 | GtkWidget *window; | |
218 | g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), FALSE); | |
219 | g_return_val_if_fail(VIRT_VIEWER_IS_WINDOW(vwin), FALSE); | |
220 | ||
221 | window = GTK_WIDGET(virt_viewer_window_get_window(vwin)); | |
222 | if (visible) { | |
223 | gtk_widget_show(window); | |
224 | return TRUE; | |
225 | } else { | |
226 | if (virt_viewer_app_get_n_windows_visible(self) > 1) { | |
227 | gtk_widget_hide(window); | |
228 | return FALSE; | |
229 | } else if (virt_viewer_app_get_n_windows(self) > 1) { | |
230 | GtkWidget *dialog = | |
231 | gtk_message_dialog_new (GTK_WINDOW(window), | |
232 | GTK_DIALOG_DESTROY_WITH_PARENT, | |
233 | GTK_MESSAGE_QUESTION, | |
234 | GTK_BUTTONS_OK_CANCEL, | |
235 | _("This is the last visible display. Do you want to quit?")); | |
236 | gint result = gtk_dialog_run (GTK_DIALOG (dialog)); | |
237 | switch (result) { | |
238 | case GTK_RESPONSE_OK: | |
239 | virt_viewer_app_quit(self); | |
240 | break; | |
241 | default: | |
242 | break; | |
243 | } | |
244 | gtk_widget_destroy(dialog); | |
245 | return FALSE; | |
246 | } else { | |
247 | virt_viewer_app_quit(self); | |
248 | return FALSE; | |
249 | } | |
250 | } | |
251 | ||
252 | g_warn_if_reached(); | |
253 | return FALSE; | |
254 | } | |
255 | ||
256 | void | |
257 | virt_viewer_app_about_close(GtkWidget *dialog, | |
258 | VirtViewerApp *self G_GNUC_UNUSED) | |
259 | { | |
260 | gtk_widget_hide(dialog); | |
261 | gtk_widget_destroy(dialog); | |
262 | } | |
263 | ||
264 | void | |
265 | virt_viewer_app_about_delete(GtkWidget *dialog, | |
266 | void *dummy G_GNUC_UNUSED, | |
267 | VirtViewerApp *self G_GNUC_UNUSED) | |
268 | { | |
269 | gtk_widget_hide(dialog); | |
270 | gtk_widget_destroy(dialog); | |
271 | } | |
272 | ||
273 | #if defined(HAVE_SOCKETPAIR) && defined(HAVE_FORK) | |
274 | ||
275 | static int | |
276 | virt_viewer_app_open_tunnel(const char **cmd) | |
277 | { | |
278 | int fd[2]; | |
279 | pid_t pid; | |
280 | ||
281 | if (socketpair(PF_UNIX, SOCK_STREAM, 0, fd) < 0) | |
282 | return -1; | |
283 | ||
284 | pid = fork(); | |
285 | if (pid == -1) { | |
286 | close(fd[0]); | |
287 | close(fd[1]); | |
288 | return -1; | |
289 | } | |
290 | ||
291 | if (pid == 0) { /* child */ | |
292 | close(fd[0]); | |
293 | close(0); | |
294 | close(1); | |
295 | if (dup(fd[1]) < 0) | |
296 | _exit(1); | |
297 | if (dup(fd[1]) < 0) | |
298 | _exit(1); | |
299 | close(fd[1]); | |
300 | execvp("ssh", (char *const*)cmd); | |
301 | _exit(1); | |
302 | } | |
303 | close(fd[1]); | |
304 | return fd[0]; | |
305 | } | |
306 | ||
307 | ||
308 | static int | |
309 | virt_viewer_app_open_tunnel_ssh(const char *sshhost, | |
310 | int sshport, | |
311 | const char *sshuser, | |
312 | const char *host, | |
313 | const char *port, | |
314 | const char *unixsock) | |
315 | { | |
316 | const char *cmd[10]; | |
317 | char portstr[50]; | |
318 | int n = 0; | |
319 | ||
320 | cmd[n++] = "ssh"; | |
321 | if (!sshport) { | |
322 | cmd[n++] = "-p"; | |
323 | sprintf(portstr, "%d", sshport); | |
324 | cmd[n++] = portstr; | |
325 | } | |
326 | if (sshuser) { | |
327 | cmd[n++] = "-l"; | |
328 | cmd[n++] = sshuser; | |
329 | } | |
330 | cmd[n++] = sshhost; | |
331 | cmd[n++] = "nc"; | |
332 | if (port) { | |
333 | cmd[n++] = host; | |
334 | cmd[n++] = port; | |
335 | } else { | |
336 | cmd[n++] = "-U"; | |
337 | cmd[n++] = unixsock; | |
338 | } | |
339 | cmd[n++] = NULL; | |
340 | ||
341 | return virt_viewer_app_open_tunnel(cmd); | |
342 | } | |
343 | ||
344 | static int | |
345 | virt_viewer_app_open_unix_sock(const char *unixsock) | |
346 | { | |
347 | struct sockaddr_un addr; | |
348 | int fd; | |
349 | ||
350 | memset(&addr, 0, sizeof addr); | |
351 | addr.sun_family = AF_UNIX; | |
352 | strcpy(addr.sun_path, unixsock); | |
353 | ||
354 | if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) | |
355 | return -1; | |
356 | ||
357 | if (connect(fd, (struct sockaddr *)&addr, sizeof addr) < 0) { | |
358 | close(fd); | |
359 | return -1; | |
360 | } | |
361 | ||
362 | return fd; | |
363 | } | |
364 | ||
365 | #endif /* defined(HAVE_SOCKETPAIR) && defined(HAVE_FORK) */ | |
366 | ||
367 | void | |
368 | virt_viewer_app_trace(VirtViewerApp *self, | |
369 | const char *fmt, ...) | |
370 | { | |
371 | g_return_if_fail(VIRT_VIEWER_IS_APP(self)); | |
372 | va_list ap; | |
373 | VirtViewerAppPrivate *priv = self->priv; | |
374 | ||
375 | if (doDebug) { | |
376 | va_start(ap, fmt); | |
377 | g_logv(G_LOG_DOMAIN, G_LOG_LEVEL_DEBUG, fmt, ap); | |
378 | va_end(ap); | |
379 | } | |
380 | ||
381 | if (priv->verbose) { | |
382 | va_start(ap, fmt); | |
383 | g_vprintf(fmt, ap); | |
384 | va_end(ap); | |
385 | } | |
386 | } | |
387 | ||
388 | static void update_title(gpointer key G_GNUC_UNUSED, | |
389 | gpointer value, | |
390 | gpointer user_data G_GNUC_UNUSED) | |
391 | { | |
392 | virt_viewer_window_update_title(VIRT_VIEWER_WINDOW(value)); | |
393 | } | |
394 | ||
395 | static void | |
396 | virt_viewer_app_update_title(VirtViewerApp *self) | |
397 | { | |
398 | g_hash_table_foreach(self->priv->windows, update_title, NULL); | |
399 | } | |
400 | ||
401 | static VirtViewerWindow * | |
402 | virt_viewer_app_get_nth_window(VirtViewerApp *self, gint nth) | |
403 | { | |
404 | return g_hash_table_lookup(self->priv->windows, &nth); | |
405 | } | |
406 | ||
407 | static gboolean | |
408 | virt_viewer_app_remove_nth_window(VirtViewerApp *self, gint nth) | |
409 | { | |
410 | gboolean removed; | |
411 | ||
412 | g_return_val_if_fail(nth != 0, FALSE); | |
413 | removed = g_hash_table_remove(self->priv->windows, &nth); | |
414 | g_warn_if_fail(removed); | |
415 | ||
416 | return removed; | |
417 | } | |
418 | ||
419 | static void | |
420 | virt_viewer_app_set_nth_window(VirtViewerApp *self, gint nth, VirtViewerWindow *win) | |
421 | { | |
422 | gint *key; | |
423 | ||
424 | g_return_if_fail(virt_viewer_app_get_nth_window(self, nth) == NULL); | |
425 | key = g_malloc(sizeof(gint)); | |
426 | *key = nth; | |
427 | g_hash_table_insert(self->priv->windows, key, win); | |
428 | } | |
429 | ||
430 | static void | |
431 | viewer_window_visible_cb(GtkWidget *widget G_GNUC_UNUSED, | |
432 | gpointer user_data) | |
433 | { | |
434 | virt_viewer_app_update_menu_displays(VIRT_VIEWER_APP(user_data)); | |
435 | } | |
436 | ||
437 | ||
438 | static VirtViewerWindow* | |
439 | virt_viewer_app_window_new(VirtViewerApp *self, GtkWidget *container, gint nth) | |
440 | { | |
441 | VirtViewerWindow* window; | |
442 | GtkWindow *w; | |
443 | ||
444 | window = g_object_new(VIRT_VIEWER_TYPE_WINDOW, | |
445 | "app", self, | |
446 | "container", container, | |
447 | NULL); | |
448 | virt_viewer_app_set_nth_window(self, nth, window); | |
449 | w = virt_viewer_window_get_window(window); | |
450 | ||
451 | /* this will set new window to fullscreen if necessary */ | |
452 | virt_viewer_app_set_fullscreen(self, self->priv->fullscreen); | |
453 | g_signal_connect(w, "hide", G_CALLBACK(viewer_window_visible_cb), self); | |
454 | g_signal_connect(w, "show", G_CALLBACK(viewer_window_visible_cb), self); | |
455 | return window; | |
456 | } | |
457 | ||
458 | static void | |
459 | display_show_hint(VirtViewerDisplay *display, | |
460 | GParamSpec *pspec G_GNUC_UNUSED, | |
461 | VirtViewerWindow *win) | |
462 | { | |
463 | VirtViewerApp *self; | |
464 | VirtViewerNotebook *nb = virt_viewer_window_get_notebook(win); | |
465 | GtkWindow *w = virt_viewer_window_get_window(win); | |
466 | gint nth, hint; | |
467 | ||
468 | g_object_get(win, | |
469 | "app", &self, | |
470 | NULL); | |
471 | g_object_get(display, | |
472 | "nth-display", &nth, | |
473 | "show-hint", &hint, | |
474 | NULL); | |
475 | ||
476 | if (hint == VIRT_VIEWER_DISPLAY_SHOW_HINT_HIDE) { | |
477 | if (win != self->priv->main_window && | |
478 | g_getenv("VIRT_VIEWER_HIDE")) | |
479 | gtk_widget_hide(GTK_WIDGET(w)); | |
480 | virt_viewer_notebook_show_status(nb, _("Waiting for display %d..."), nth + 1); | |
481 | } else { | |
482 | virt_viewer_notebook_show_display(nb); | |
483 | gtk_widget_show(GTK_WIDGET(w)); | |
484 | gtk_window_present(w); | |
485 | } | |
486 | ||
487 | g_object_unref(self); | |
488 | } | |
489 | ||
490 | static void | |
491 | virt_viewer_app_display_added(VirtViewerSession *session G_GNUC_UNUSED, | |
492 | VirtViewerDisplay *display, | |
493 | VirtViewerApp *self) | |
494 | { | |
495 | VirtViewerAppPrivate *priv = self->priv; | |
496 | VirtViewerWindow *window; | |
497 | gint nth; | |
498 | ||
499 | g_object_get(display, "nth-display", &nth, NULL); | |
500 | if (nth == 0) { | |
501 | window = priv->main_window; | |
502 | } else { | |
503 | if (priv->container) { | |
504 | g_warning("multi-head not yet supported within container"); | |
505 | return; | |
506 | } | |
507 | ||
508 | g_return_if_fail(virt_viewer_app_get_nth_window(self, nth) == NULL); | |
509 | window = virt_viewer_app_window_new(self, NULL, nth); | |
510 | } | |
511 | ||
512 | virt_viewer_window_set_display(window, display); | |
513 | g_signal_connect(display, "notify::show-hint", | |
514 | G_CALLBACK(display_show_hint), window); | |
515 | g_object_notify(G_OBJECT(display), "show-hint"); /* call display_show_hint */ | |
516 | } | |
517 | ||
518 | ||
519 | static void | |
520 | virt_viewer_app_display_removed(VirtViewerSession *session G_GNUC_UNUSED, | |
521 | VirtViewerDisplay *display, | |
522 | VirtViewerApp *self) | |
523 | { | |
524 | VirtViewerWindow *win = NULL; | |
525 | gint nth; | |
526 | ||
527 | gtk_widget_hide(GTK_WIDGET(display)); | |
528 | g_object_get(display, "nth-display", &nth, NULL); | |
529 | win = virt_viewer_app_get_nth_window(self, nth); | |
530 | virt_viewer_window_set_display(win, NULL); | |
531 | ||
532 | if (nth != 0) | |
533 | virt_viewer_app_remove_nth_window(self, nth); | |
534 | } | |
535 | ||
536 | int | |
537 | virt_viewer_app_create_session(VirtViewerApp *self, const gchar *type) | |
538 | { | |
539 | g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), -1); | |
540 | VirtViewerAppPrivate *priv = self->priv; | |
541 | g_return_val_if_fail(priv->session == NULL, -1); | |
542 | ||
543 | if (g_strcasecmp(type, "vnc") == 0) { | |
544 | virt_viewer_app_trace(self, "Guest %s has a %s display\n", | |
545 | priv->guest_name, type); | |
546 | priv->session = virt_viewer_session_vnc_new(); | |
547 | } else | |
548 | #ifdef HAVE_SPICE_GTK | |
549 | if (g_strcasecmp(type, "spice") == 0) { | |
550 | virt_viewer_app_trace(self, "Guest %s has a %s display\n", | |
551 | priv->guest_name, type); | |
552 | priv->session = virt_viewer_session_spice_new(); | |
553 | } else | |
554 | #endif | |
555 | { | |
556 | virt_viewer_app_trace(self, "Guest %s has unsupported %s display type\n", | |
557 | priv->guest_name, type); | |
558 | virt_viewer_app_simple_message_dialog(self, _("Unknown graphic type for the guest %s"), | |
559 | priv->guest_name); | |
560 | return -1; | |
561 | } | |
562 | ||
563 | g_signal_connect(priv->session, "session-initialized", | |
564 | G_CALLBACK(virt_viewer_app_initialized), self); | |
565 | g_signal_connect(priv->session, "session-connected", | |
566 | G_CALLBACK(virt_viewer_app_connected), self); | |
567 | g_signal_connect(priv->session, "session-disconnected", | |
568 | G_CALLBACK(virt_viewer_app_disconnected), self); | |
569 | g_signal_connect(priv->session, "session-channel-open", | |
570 | G_CALLBACK(virt_viewer_app_channel_open), self); | |
571 | g_signal_connect(priv->session, "session-auth-refused", | |
572 | G_CALLBACK(virt_viewer_app_auth_refused), self); | |
573 | g_signal_connect(priv->session, "session-auth-failed", | |
574 | G_CALLBACK(virt_viewer_app_auth_failed), self); | |
575 | g_signal_connect(priv->session, "session-display-added", | |
576 | G_CALLBACK(virt_viewer_app_display_added), self); | |
577 | g_signal_connect(priv->session, "session-display-removed", | |
578 | G_CALLBACK(virt_viewer_app_display_removed), self); | |
579 | ||
580 | g_signal_connect(priv->session, "session-cut-text", | |
581 | G_CALLBACK(virt_viewer_app_server_cut_text), self); | |
582 | g_signal_connect(priv->session, "session-bell", | |
583 | G_CALLBACK(virt_viewer_app_bell), self); | |
584 | ||
585 | return 0; | |
586 | } | |
587 | ||
588 | #if defined(HAVE_SOCKETPAIR) && defined(HAVE_FORK) | |
589 | static void | |
590 | virt_viewer_app_channel_open(VirtViewerSession *session, | |
591 | VirtViewerSessionChannel *channel, | |
592 | VirtViewerApp *self) | |
593 | { | |
594 | VirtViewerAppPrivate *priv; | |
595 | int fd = -1; | |
596 | ||
597 | g_return_if_fail(self != NULL); | |
598 | ||
599 | priv = self->priv; | |
600 | if (priv->transport && g_strcasecmp(priv->transport, "ssh") == 0 && | |
601 | !priv->direct) { | |
602 | if ((fd = virt_viewer_app_open_tunnel_ssh(priv->host, priv->port, priv->user, | |
603 | priv->ghost, priv->gport, NULL)) < 0) | |
604 | virt_viewer_app_simple_message_dialog(self, _("Connect to ssh failed.")); | |
605 | } else { | |
606 | virt_viewer_app_simple_message_dialog(self, _("Can't connect to channel, SSH only supported.")); | |
607 | } | |
608 | ||
609 | if (fd >= 0) | |
610 | virt_viewer_session_channel_open_fd(session, channel, fd); | |
611 | } | |
612 | #else | |
613 | static void | |
614 | virt_viewer_app_channel_open(VirtViewerSession *session G_GNUC_UNUSED, | |
615 | VirtViewerSessionChannel *channel G_GNUC_UNUSED, | |
616 | VirtViewerApp *self) | |
617 | { | |
618 | virt_viewer_app_simple_message_dialog(self, _("Connect to channel unsupported.")); | |
619 | } | |
620 | #endif | |
621 | ||
622 | int | |
623 | virt_viewer_app_activate(VirtViewerApp *self) | |
624 | { | |
625 | g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), -1); | |
626 | VirtViewerAppPrivate *priv = self->priv; | |
627 | int fd = -1; | |
628 | int ret = -1; | |
629 | ||
630 | if (priv->active) | |
631 | goto cleanup; | |
632 | ||
633 | #if defined(HAVE_SOCKETPAIR) && defined(HAVE_FORK) | |
634 | if (priv->transport && | |
635 | g_strcasecmp(priv->transport, "ssh") == 0 && | |
636 | !priv->direct) { | |
637 | if (priv->gport) { | |
638 | virt_viewer_app_trace(self, "Opening indirect TCP connection to display at %s:%s\n", | |
639 | priv->ghost, priv->gport); | |
640 | } else { | |
641 | virt_viewer_app_trace(self, "Opening indirect UNIX connection to display at %s\n", | |
642 | priv->unixsock); | |
643 | } | |
644 | virt_viewer_app_trace(self, "Setting up SSH tunnel via %s@%s:%d\n", | |
645 | priv->user, priv->host, priv->port ? priv->port : 22); | |
646 | ||
647 | if ((fd = virt_viewer_app_open_tunnel_ssh(priv->host, priv->port, | |
648 | priv->user, priv->ghost, | |
649 | priv->gport, priv->unixsock)) < 0) | |
650 | return -1; | |
651 | } else if (priv->unixsock) { | |
652 | virt_viewer_app_trace(self, "Opening direct UNIX connection to display at %s", | |
653 | priv->unixsock); | |
654 | if ((fd = virt_viewer_app_open_unix_sock(priv->unixsock)) < 0) | |
655 | return -1; | |
656 | } | |
657 | #endif | |
658 | ||
659 | if (fd >= 0) { | |
660 | ret = virt_viewer_session_open_fd(VIRT_VIEWER_SESSION(priv->session), fd); | |
661 | } else { | |
662 | virt_viewer_app_trace(self, "Opening direct TCP connection to display at %s:%s\n", | |
663 | priv->ghost, priv->gport); | |
664 | ret = virt_viewer_session_open_host(VIRT_VIEWER_SESSION(priv->session), | |
665 | priv->ghost, priv->gport); | |
666 | } | |
667 | ||
668 | virt_viewer_app_show_status(self, _("Connecting to graphic server")); | |
669 | ||
670 | priv->connected = FALSE; | |
671 | priv->active = TRUE; | |
672 | priv->grabbed = FALSE; | |
673 | virt_viewer_app_update_title(self); | |
674 | ||
675 | cleanup: | |
676 | return ret; | |
677 | } | |
678 | ||
679 | /* text was actually requested */ | |
680 | static void | |
681 | virt_viewer_app_clipboard_copy(GtkClipboard *clipboard G_GNUC_UNUSED, | |
682 | GtkSelectionData *data, | |
683 | guint info G_GNUC_UNUSED, | |
684 | VirtViewerApp *self) | |
685 | { | |
686 | VirtViewerAppPrivate *priv = self->priv; | |
687 | ||
688 | gtk_selection_data_set_text(data, priv->clipboard, -1); | |
689 | } | |
690 | ||
691 | static void | |
692 | virt_viewer_app_server_cut_text(VirtViewerSession *session G_GNUC_UNUSED, | |
693 | const gchar *text, | |
694 | VirtViewerApp *self) | |
695 | { | |
696 | GtkClipboard *cb; | |
697 | gsize a, b; | |
698 | VirtViewerAppPrivate *priv = self->priv; | |
699 | GtkTargetEntry targets[] = { | |
700 | {g_strdup("UTF8_STRING"), 0, 0}, | |
701 | {g_strdup("COMPOUND_TEXT"), 0, 0}, | |
702 | {g_strdup("TEXT"), 0, 0}, | |
703 | {g_strdup("STRING"), 0, 0}, | |
704 | }; | |
705 | ||
706 | if (!text) | |
707 | return; | |
708 | ||
709 | g_free (priv->clipboard); | |
710 | priv->clipboard = g_convert (text, -1, "utf-8", "iso8859-1", &a, &b, NULL); | |
711 | ||
712 | if (priv->clipboard) { | |
713 | cb = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); | |
714 | ||
715 | gtk_clipboard_set_with_owner (cb, | |
716 | targets, | |
717 | G_N_ELEMENTS(targets), | |
718 | (GtkClipboardGetFunc)virt_viewer_app_clipboard_copy, | |
719 | NULL, | |
720 | G_OBJECT (self)); | |
721 | } | |
722 | } | |
723 | ||
724 | ||
725 | static void virt_viewer_app_bell(VirtViewerSession *session G_GNUC_UNUSED, | |
726 | VirtViewerApp *self) | |
727 | { | |
728 | VirtViewerAppPrivate *priv = self->priv; | |
729 | ||
730 | gdk_window_beep(gtk_widget_get_window(GTK_WIDGET(virt_viewer_window_get_window(priv->main_window)))); | |
731 | } | |
732 | ||
733 | ||
734 | static int | |
735 | virt_viewer_app_default_initial_connect(VirtViewerApp *self) | |
736 | { | |
737 | return virt_viewer_app_activate(self); | |
738 | } | |
739 | ||
740 | int | |
741 | virt_viewer_app_initial_connect(VirtViewerApp *self) | |
742 | { | |
743 | VirtViewerAppClass *klass; | |
744 | ||
745 | g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), -1); | |
746 | klass = VIRT_VIEWER_APP_GET_CLASS(self); | |
747 | ||
748 | return klass->initial_connect(self); | |
749 | } | |
750 | ||
751 | static gboolean | |
752 | virt_viewer_app_retryauth(gpointer opaque) | |
753 | { | |
754 | VirtViewerApp *self = opaque; | |
755 | ||
756 | virt_viewer_app_initial_connect(self); | |
757 | ||
758 | return FALSE; | |
759 | } | |
760 | ||
761 | static gboolean | |
762 | virt_viewer_app_connect_timer(void *opaque) | |
763 | { | |
764 | VirtViewerApp *self = opaque; | |
765 | VirtViewerAppPrivate *priv = self->priv; | |
766 | ||
767 | DEBUG_LOG("Connect timer fired"); | |
768 | ||
769 | if (!priv->active && | |
770 | virt_viewer_app_initial_connect(self) < 0) | |
771 | gtk_main_quit(); | |
772 | ||
773 | if (priv->active) { | |
774 | priv->reconnect_poll = 0; | |
775 | return FALSE; | |
776 | } | |
777 | ||
778 | return TRUE; | |
779 | } | |
780 | ||
781 | void | |
782 | virt_viewer_app_start_reconnect_poll(VirtViewerApp *self) | |
783 | { | |
784 | g_return_if_fail(VIRT_VIEWER_IS_APP(self)); | |
785 | VirtViewerAppPrivate *priv = self->priv; | |
786 | ||
787 | if (priv->reconnect_poll != 0) | |
788 | return; | |
789 | ||
790 | priv->reconnect_poll = g_timeout_add(500, virt_viewer_app_connect_timer, self); | |
791 | } | |
792 | ||
793 | static void | |
794 | virt_viewer_app_default_deactivated(VirtViewerApp *self) | |
795 | { | |
796 | VirtViewerAppPrivate *priv = self->priv; | |
797 | ||
798 | virt_viewer_app_show_status(self, _("Guest domain has shutdown")); | |
799 | virt_viewer_app_trace(self, "Guest %s display has disconnected, shutting down", | |
800 | priv->guest_name); | |
801 | gtk_main_quit(); | |
802 | } | |
803 | ||
804 | static void | |
805 | virt_viewer_app_deactivated(VirtViewerApp *self) | |
806 | { | |
807 | VirtViewerAppClass *klass; | |
808 | klass = VIRT_VIEWER_APP_GET_CLASS(self); | |
809 | ||
810 | klass->deactivated(self); | |
811 | } | |
812 | ||
813 | static void | |
814 | virt_viewer_app_deactivate(VirtViewerApp *self) | |
815 | { | |
816 | VirtViewerAppPrivate *priv = self->priv; | |
817 | ||
818 | if (!priv->active) | |
819 | return; | |
820 | ||
821 | if (priv->session) | |
822 | virt_viewer_session_close(VIRT_VIEWER_SESSION(priv->session)); | |
823 | ||
824 | priv->connected = FALSE; | |
825 | priv->active = FALSE; | |
826 | #if 0 | |
827 | g_free(priv->pretty_address); | |
828 | priv->pretty_address = NULL; | |
829 | #endif | |
830 | priv->grabbed = FALSE; | |
831 | virt_viewer_app_update_title(self); | |
832 | ||
833 | if (priv->authretry) { | |
834 | priv->authretry = FALSE; | |
835 | g_idle_add(virt_viewer_app_retryauth, self); | |
836 | } else | |
837 | virt_viewer_app_deactivated(self); | |
838 | ||
839 | } | |
840 | ||
841 | static void | |
842 | virt_viewer_app_connected(VirtViewerSession *session G_GNUC_UNUSED, | |
843 | VirtViewerApp *self) | |
844 | { | |
845 | VirtViewerAppPrivate *priv = self->priv; | |
846 | ||
847 | priv->connected = TRUE; | |
848 | virt_viewer_app_show_status(self, _("Connected to graphic server")); | |
849 | } | |
850 | ||
851 | ||
852 | ||
853 | static void | |
854 | virt_viewer_app_initialized(VirtViewerSession *session G_GNUC_UNUSED, | |
855 | VirtViewerApp *self) | |
856 | { | |
857 | virt_viewer_app_update_title(self); | |
858 | } | |
859 | ||
860 | static void | |
861 | virt_viewer_app_disconnected(VirtViewerSession *session G_GNUC_UNUSED, | |
862 | VirtViewerApp *self) | |
863 | { | |
864 | VirtViewerAppPrivate *priv = self->priv; | |
865 | ||
866 | if (!priv->connected) { | |
867 | virt_viewer_app_simple_message_dialog(self, | |
868 | _("Unable to connect to the graphic server %s"), | |
869 | priv->pretty_address); | |
870 | } | |
871 | virt_viewer_app_deactivate(self); | |
872 | } | |
873 | ||
874 | ||
875 | static void virt_viewer_app_auth_refused(VirtViewerSession *session G_GNUC_UNUSED, | |
876 | const char *msg, | |
877 | VirtViewerApp *self) | |
878 | { | |
879 | GtkWidget *dialog; | |
880 | int ret; | |
881 | VirtViewerAppPrivate *priv = self->priv; | |
882 | ||
883 | dialog = gtk_message_dialog_new(virt_viewer_window_get_window(priv->main_window), | |
884 | GTK_DIALOG_MODAL | | |
885 | GTK_DIALOG_DESTROY_WITH_PARENT, | |
886 | GTK_MESSAGE_ERROR, | |
887 | GTK_BUTTONS_YES_NO, | |
888 | _("Unable to authenticate with remote desktop server at %s: %s\n" | |
889 | "Retry connection again?"), | |
890 | priv->pretty_address, msg); | |
891 | ||
892 | ret = gtk_dialog_run(GTK_DIALOG(dialog)); | |
893 | ||
894 | gtk_widget_destroy(dialog); | |
895 | ||
896 | if (ret == GTK_RESPONSE_YES) | |
897 | priv->authretry = TRUE; | |
898 | else | |
899 | priv->authretry = FALSE; | |
900 | } | |
901 | ||
902 | ||
903 | static void virt_viewer_app_auth_failed(VirtViewerSession *session G_GNUC_UNUSED, | |
904 | const char *msg, | |
905 | VirtViewerApp *self) | |
906 | { | |
907 | VirtViewerAppPrivate *priv = self->priv; | |
908 | ||
909 | virt_viewer_app_simple_message_dialog(self, | |
910 | _("Unable to authenticate with remote desktop server at %s"), | |
911 | priv->pretty_address, msg); | |
912 | } | |
913 | ||
914 | static void | |
915 | virt_viewer_app_get_property (GObject *object, guint property_id, | |
916 | GValue *value G_GNUC_UNUSED, GParamSpec *pspec) | |
917 | { | |
918 | g_return_if_fail(VIRT_VIEWER_IS_APP(object)); | |
919 | VirtViewerApp *self = VIRT_VIEWER_APP(object); | |
920 | VirtViewerAppPrivate *priv = self->priv; | |
921 | ||
922 | switch (property_id) { | |
923 | case PROP_VERBOSE: | |
924 | g_value_set_boolean(value, priv->verbose); | |
925 | break; | |
926 | ||
927 | case PROP_CONTAINER: | |
928 | g_value_set_object(value, priv->container); | |
929 | break; | |
930 | ||
931 | case PROP_SESSION: | |
932 | g_value_set_object(value, priv->session); | |
933 | break; | |
934 | ||
935 | case PROP_GUEST_NAME: | |
936 | g_value_set_string(value, priv->guest_name); | |
937 | break; | |
938 | ||
939 | case PROP_FULLSCREEN: | |
940 | g_value_set_boolean(value, priv->fullscreen); | |
941 | break; | |
942 | ||
943 | default: | |
944 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); | |
945 | } | |
946 | } | |
947 | ||
948 | static void | |
949 | virt_viewer_app_set_property (GObject *object, guint property_id, | |
950 | const GValue *value G_GNUC_UNUSED, GParamSpec *pspec) | |
951 | { | |
952 | g_return_if_fail(VIRT_VIEWER_IS_APP(object)); | |
953 | VirtViewerApp *self = VIRT_VIEWER_APP(object); | |
954 | VirtViewerAppPrivate *priv = self->priv; | |
955 | ||
956 | switch (property_id) { | |
957 | case PROP_VERBOSE: | |
958 | priv->verbose = g_value_get_boolean(value); | |
959 | break; | |
960 | ||
961 | case PROP_CONTAINER: | |
962 | g_return_if_fail(priv->container == NULL); | |
963 | priv->container = g_value_dup_object(value); | |
964 | break; | |
965 | ||
966 | case PROP_GUEST_NAME: | |
967 | g_free(priv->guest_name); | |
968 | priv->guest_name = g_value_dup_string(value); | |
969 | break; | |
970 | ||
971 | case PROP_FULLSCREEN: | |
972 | virt_viewer_app_set_fullscreen(self, g_value_get_boolean(value)); | |
973 | break; | |
974 | ||
975 | default: | |
976 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); | |
977 | } | |
978 | } | |
979 | ||
980 | static void | |
981 | virt_viewer_app_dispose (GObject *object) | |
982 | { | |
983 | VirtViewerApp *self = VIRT_VIEWER_APP(object); | |
984 | VirtViewerAppPrivate *priv = self->priv; | |
985 | ||
986 | if (priv->windows) { | |
987 | g_hash_table_unref(priv->windows); | |
988 | priv->windows = NULL; | |
989 | } | |
990 | ||
991 | if (priv->main_window) { | |
992 | g_object_unref(priv->main_window); | |
993 | priv->main_window = NULL; | |
994 | } | |
995 | ||
996 | if (priv->container) { | |
997 | g_object_unref(priv->container); | |
998 | priv->container = NULL; | |
999 | } | |
1000 | ||
1001 | virt_viewer_app_free_connect_info(self); | |
1002 | ||
1003 | G_OBJECT_CLASS (virt_viewer_app_parent_class)->dispose (object); | |
1004 | } | |
1005 | ||
1006 | static gboolean | |
1007 | virt_viewer_app_default_start(VirtViewerApp *self) | |
1008 | { | |
1009 | VirtViewerAppPrivate *priv; | |
1010 | GtkWindow *win; | |
1011 | priv = self->priv; | |
1012 | ||
1013 | win = virt_viewer_window_get_window(priv->main_window); | |
1014 | if (win) | |
1015 | gtk_widget_show(GTK_WIDGET(win)); | |
1016 | else { | |
1017 | gtk_box_pack_end(GTK_BOX(priv->container), priv->main_notebook, TRUE, TRUE, 0); | |
1018 | gtk_widget_show(GTK_WIDGET(priv->main_notebook)); | |
1019 | } | |
1020 | ||
1021 | return TRUE; | |
1022 | } | |
1023 | ||
1024 | gboolean virt_viewer_app_start(VirtViewerApp *self) | |
1025 | { | |
1026 | VirtViewerAppClass *klass; | |
1027 | ||
1028 | g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), FALSE); | |
1029 | klass = VIRT_VIEWER_APP_GET_CLASS(self); | |
1030 | ||
1031 | g_return_val_if_fail(!self->priv->started, TRUE); | |
1032 | ||
1033 | self->priv->started = klass->start(self); | |
1034 | return self->priv->started; | |
1035 | } | |
1036 | ||
1037 | static void | |
1038 | virt_viewer_app_init (VirtViewerApp *self) | |
1039 | { | |
1040 | self->priv = GET_PRIVATE(self); | |
1041 | self->priv->windows = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, g_object_unref); | |
1042 | } | |
1043 | ||
1044 | static GObject * | |
1045 | virt_viewer_app_constructor (GType gtype, | |
1046 | guint n_properties, | |
1047 | GObjectConstructParam *properties) | |
1048 | { | |
1049 | GObject *obj; | |
1050 | VirtViewerApp *self; | |
1051 | VirtViewerAppPrivate *priv; | |
1052 | ||
1053 | obj = G_OBJECT_CLASS (virt_viewer_app_parent_class)->constructor (gtype, n_properties, properties); | |
1054 | self = VIRT_VIEWER_APP(obj); | |
1055 | priv = self->priv; | |
1056 | ||
1057 | priv->main_window = virt_viewer_app_window_new(self, priv->container, 0); | |
1058 | priv->main_notebook = GTK_WIDGET(virt_viewer_window_get_notebook(priv->main_window)); | |
1059 | ||
1060 | return obj; | |
1061 | } | |
1062 | ||
1063 | static void | |
1064 | virt_viewer_app_class_init (VirtViewerAppClass *klass) | |
1065 | { | |
1066 | GObjectClass *object_class = G_OBJECT_CLASS (klass); | |
1067 | ||
1068 | g_type_class_add_private (klass, sizeof (VirtViewerAppPrivate)); | |
1069 | ||
1070 | object_class->constructor = virt_viewer_app_constructor; | |
1071 | object_class->get_property = virt_viewer_app_get_property; | |
1072 | object_class->set_property = virt_viewer_app_set_property; | |
1073 | object_class->dispose = virt_viewer_app_dispose; | |
1074 | ||
1075 | klass->start = virt_viewer_app_default_start; | |
1076 | klass->initial_connect = virt_viewer_app_default_initial_connect; | |
1077 | klass->deactivated = virt_viewer_app_default_deactivated; | |
1078 | ||
1079 | g_object_class_install_property(object_class, | |
1080 | PROP_VERBOSE, | |
1081 | g_param_spec_boolean("verbose", | |
1082 | "Verbose", | |
1083 | "Verbose trace", | |
1084 | FALSE, | |
1085 | G_PARAM_READABLE | | |
1086 | G_PARAM_WRITABLE | | |
1087 | G_PARAM_STATIC_STRINGS)); | |
1088 | ||
1089 | g_object_class_install_property(object_class, | |
1090 | PROP_CONTAINER, | |
1091 | g_param_spec_object("container", | |
1092 | "Container", | |
1093 | "Widget container", | |
1094 | GTK_TYPE_WIDGET, | |
1095 | G_PARAM_READABLE | | |
1096 | G_PARAM_WRITABLE | | |
1097 | G_PARAM_CONSTRUCT_ONLY | | |
1098 | G_PARAM_STATIC_STRINGS)); | |
1099 | ||
1100 | g_object_class_install_property(object_class, | |
1101 | PROP_SESSION, | |
1102 | g_param_spec_object("session", | |
1103 | "Session", | |
1104 | "ViewerSession", | |
1105 | VIRT_VIEWER_TYPE_SESSION, | |
1106 | G_PARAM_READABLE | | |
1107 | G_PARAM_STATIC_STRINGS)); | |
1108 | ||
1109 | g_object_class_install_property(object_class, | |
1110 | PROP_GUEST_NAME, | |
1111 | g_param_spec_string("guest-name", | |
1112 | "Guest name", | |
1113 | "Guest name", | |
1114 | "", | |
1115 | G_PARAM_READABLE | | |
1116 | G_PARAM_WRITABLE | | |
1117 | G_PARAM_STATIC_STRINGS)); | |
1118 | ||
1119 | g_object_class_install_property(object_class, | |
1120 | PROP_FULLSCREEN, | |
1121 | g_param_spec_boolean("fullscreen", | |
1122 | "Fullscreen", | |
1123 | "Fullscreen", | |
1124 | FALSE, | |
1125 | G_PARAM_READABLE | | |
1126 | G_PARAM_WRITABLE | | |
1127 | G_PARAM_STATIC_STRINGS)); | |
1128 | } | |
1129 | ||
1130 | void | |
1131 | virt_viewer_app_set_direct(VirtViewerApp *self, gboolean direct) | |
1132 | { | |
1133 | g_return_if_fail(VIRT_VIEWER_IS_APP(self)); | |
1134 | ||
1135 | self->priv->direct = direct; | |
1136 | } | |
1137 | ||
1138 | gboolean | |
1139 | virt_viewer_app_is_active(VirtViewerApp *self) | |
1140 | { | |
1141 | g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), FALSE); | |
1142 | ||
1143 | return self->priv->active; | |
1144 | } | |
1145 | ||
1146 | gboolean | |
1147 | virt_viewer_app_has_session(VirtViewerApp *self) | |
1148 | { | |
1149 | g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), FALSE); | |
1150 | ||
1151 | return self->priv->session != NULL; | |
1152 | } | |
1153 | ||
1154 | static void | |
1155 | virt_viewer_app_update_pretty_address(VirtViewerApp *self) | |
1156 | { | |
1157 | VirtViewerAppPrivate *priv; | |
1158 | ||
1159 | priv = self->priv; | |
1160 | g_free(priv->pretty_address); | |
1161 | if (priv->gport) | |
1162 | priv->pretty_address = g_strdup_printf("%s:%s", priv->ghost, priv->gport); | |
1163 | else | |
1164 | priv->pretty_address = g_strdup_printf("%s:%s", priv->host, priv->unixsock); | |
1165 | } | |
1166 | ||
1167 | typedef struct { | |
1168 | gboolean fullscreen; | |
1169 | gboolean move; | |
1170 | } FullscreenOptions; | |
1171 | ||
1172 | static void fullscreen_cb(gpointer key, | |
1173 | gpointer value, | |
1174 | gpointer user_data) | |
1175 | { | |
1176 | gint nth = *(gint*)key; | |
1177 | FullscreenOptions *options = (FullscreenOptions *)user_data; | |
1178 | VirtViewerWindow *vwin = VIRT_VIEWER_WINDOW(value); | |
1179 | ||
1180 | DEBUG_LOG("fullscreen display %d: %d", nth, options->fullscreen); | |
1181 | if (options->fullscreen) { | |
1182 | GdkScreen *screen = gdk_screen_get_default (); | |
1183 | GdkRectangle mon; | |
1184 | ||
1185 | if (nth >= gdk_screen_get_n_monitors(screen)) { | |
1186 | DEBUG_LOG("skipping display %d", nth); | |
1187 | return; | |
1188 | } | |
1189 | gdk_screen_get_monitor_geometry(screen, nth, &mon); | |
1190 | virt_viewer_window_enter_fullscreen(vwin, options->move, mon.x, mon.y); | |
1191 | } else | |
1192 | virt_viewer_window_leave_fullscreen(vwin); | |
1193 | } | |
1194 | ||
1195 | static void | |
1196 | virt_viewer_app_set_fullscreen(VirtViewerApp *self, gboolean fullscreen) | |
1197 | { | |
1198 | VirtViewerAppPrivate *priv = self->priv; | |
1199 | FullscreenOptions options = { | |
1200 | .fullscreen = fullscreen, | |
1201 | .move = virt_viewer_app_get_n_windows_visible(self) > 1, | |
1202 | }; | |
1203 | ||
1204 | /* we iterate unconditionnaly, even if it was set before to update new windows */ | |
1205 | priv->fullscreen = fullscreen; | |
1206 | g_hash_table_foreach(priv->windows, fullscreen_cb, &options); | |
1207 | } | |
1208 | ||
1209 | static void | |
1210 | menu_display_visible_toggled_cb(GtkCheckMenuItem *checkmenuitem, | |
1211 | VirtViewerWindow *vwin) | |
1212 | { | |
1213 | VirtViewerApp *self; | |
1214 | gboolean visible; | |
1215 | static gboolean reentering = FALSE; | |
1216 | ||
1217 | if (reentering) /* do not reenter if I switch you back */ | |
1218 | return; | |
1219 | ||
1220 | reentering = TRUE; | |
1221 | g_object_get(vwin, "app", &self, NULL); | |
1222 | visible = virt_viewer_app_window_set_visible(self, vwin, | |
1223 | gtk_check_menu_item_get_active(checkmenuitem)); | |
1224 | gtk_check_menu_item_set_active(checkmenuitem, /* will be toggled again */ !visible); | |
1225 | g_object_unref(self); | |
1226 | reentering = FALSE; | |
1227 | } | |
1228 | ||
1229 | static gint | |
1230 | update_menu_displays_sort(gconstpointer a, gconstpointer b) | |
1231 | { | |
1232 | const int *ai = a; | |
1233 | const int *bi = b; | |
1234 | ||
1235 | if (*ai > *bi) | |
1236 | return 1; | |
1237 | else if (*ai < *bi) | |
1238 | return -1; | |
1239 | else | |
1240 | return 0; | |
1241 | } | |
1242 | ||
1243 | static void | |
1244 | window_update_menu_displays_cb(gpointer key G_GNUC_UNUSED, | |
1245 | gpointer value, | |
1246 | gpointer user_data) | |
1247 | { | |
1248 | VirtViewerApp *self = VIRT_VIEWER_APP(user_data); | |
1249 | VirtViewerWindow *window = VIRT_VIEWER_WINDOW(value); | |
1250 | GtkMenuShell *submenu = GTK_MENU_SHELL(gtk_menu_new()); | |
1251 | GtkMenuItem *menu = virt_viewer_window_get_menu_displays(window); | |
1252 | GList *keys = g_hash_table_get_keys(self->priv->windows); | |
1253 | GList *tmp; | |
1254 | ||
1255 | keys = g_list_sort(keys, update_menu_displays_sort); | |
1256 | ||
1257 | tmp = keys; | |
1258 | while (tmp) { | |
1259 | int *nth = tmp->data; | |
1260 | VirtViewerWindow *vwin = VIRT_VIEWER_WINDOW(g_hash_table_lookup(self->priv->windows, nth)); | |
1261 | GtkWidget *item; | |
1262 | gboolean visible; | |
1263 | ||
1264 | item = gtk_check_menu_item_new_with_label(g_strdup_printf("Display %d", *nth)); | |
1265 | visible = gtk_widget_get_visible(GTK_WIDGET(virt_viewer_window_get_window(vwin))); | |
1266 | gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(item), visible); | |
1267 | g_signal_connect(G_OBJECT(item), | |
1268 | "toggled", G_CALLBACK(menu_display_visible_toggled_cb), vwin); | |
1269 | gtk_menu_shell_append(submenu, item); | |
1270 | tmp = tmp->next; | |
1271 | } | |
1272 | ||
1273 | gtk_widget_show_all(GTK_WIDGET(submenu)); | |
1274 | gtk_menu_item_set_submenu(menu, GTK_WIDGET(submenu)); | |
1275 | g_list_free(keys); | |
1276 | } | |
1277 | ||
1278 | static void | |
1279 | virt_viewer_app_update_menu_displays(VirtViewerApp *self) | |
1280 | { | |
1281 | g_hash_table_foreach(self->priv->windows, window_update_menu_displays_cb, self); | |
1282 | } | |
1283 | ||
1284 | void | |
1285 | virt_viewer_app_set_connect_info(VirtViewerApp *self, | |
1286 | const gchar *host, | |
1287 | const gchar *ghost, | |
1288 | const gchar *gport, | |
1289 | const gchar *transport, | |
1290 | const gchar *unixsock, | |
1291 | const gchar *user, | |
1292 | gint port) | |
1293 | { | |
1294 | g_return_if_fail(VIRT_VIEWER_IS_APP(self)); | |
1295 | VirtViewerAppPrivate *priv = self->priv; | |
1296 | ||
1297 | DEBUG_LOG("Set connect info: %s,%s,%s,%s,%s,%s,%d", | |
1298 | host, ghost, gport, transport, unixsock, user, port); | |
1299 | ||
1300 | g_free(priv->host); | |
1301 | g_free(priv->ghost); | |
1302 | g_free(priv->gport); | |
1303 | g_free(priv->transport); | |
1304 | g_free(priv->unixsock); | |
1305 | g_free(priv->user); | |
1306 | ||
1307 | priv->host = g_strdup(host); | |
1308 | priv->ghost = g_strdup(ghost); | |
1309 | priv->gport = g_strdup(gport); | |
1310 | priv->transport = g_strdup(transport); | |
1311 | priv->unixsock = g_strdup(unixsock); | |
1312 | priv->user = g_strdup(user); | |
1313 | priv->port = 0; | |
1314 | ||
1315 | virt_viewer_app_update_pretty_address(self); | |
1316 | } | |
1317 | ||
1318 | void | |
1319 | virt_viewer_app_free_connect_info(VirtViewerApp *self) | |
1320 | { | |
1321 | g_return_if_fail(VIRT_VIEWER_IS_APP(self)); | |
1322 | ||
1323 | virt_viewer_app_set_connect_info(self, NULL, NULL, NULL, NULL, NULL, NULL, 0); | |
1324 | } | |
1325 | ||
1326 | VirtViewerWindow* | |
1327 | virt_viewer_app_get_main_window(VirtViewerApp *self) | |
1328 | { | |
1329 | g_return_val_if_fail(VIRT_VIEWER_IS_APP(self), NULL); | |
1330 | ||
1331 | return self->priv->main_window; | |
1332 | } | |
1333 | ||
1334 | static void | |
1335 | show_status_cb(gpointer key G_GNUC_UNUSED, | |
1336 | gpointer value, | |
1337 | gpointer user_data) | |
1338 | { | |
1339 | VirtViewerNotebook *nb = virt_viewer_window_get_notebook(VIRT_VIEWER_WINDOW(value)); | |
1340 | gchar *text = (gchar*)user_data; | |
1341 | ||
1342 | virt_viewer_notebook_show_status(nb, text); | |
1343 | } | |
1344 | ||
1345 | void | |
1346 | virt_viewer_app_show_status(VirtViewerApp *self, const gchar *fmt, ...) | |
1347 | { | |
1348 | va_list args; | |
1349 | gchar *text; | |
1350 | ||
1351 | g_return_if_fail(VIRT_VIEWER_IS_APP(self)); | |
1352 | ||
1353 | va_start(args, fmt); | |
1354 | text = g_strdup_vprintf(fmt, args); | |
1355 | va_end(args); | |
1356 | ||
1357 | g_hash_table_foreach(self->priv->windows, show_status_cb, text); | |
1358 | g_free(text); | |
1359 | } | |
1360 | ||
1361 | /* | |
1362 | * Local variables: | |
1363 | * c-indent-level: 8 | |
1364 | * c-basic-offset: 8 | |
1365 | * tab-width: 8 | |
1366 | * indent-tabs-mode: t | |
1367 | * End: | |
1368 | */ |
0 | /* | |
1 | * Virt Viewer: A virtual machine console viewer | |
2 | * | |
3 | * Copyright (C) 2007 Red Hat, | |
4 | * | |
5 | * This program is free software; you can redistribute it and/or modify | |
6 | * it under the terms of the GNU General Public License as published by | |
7 | * the Free Software Foundation; either version 2 of the License, or | |
8 | * (at your option) any later version. | |
9 | * | |
10 | * This program is distributed in the hope that it will be useful, | |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
13 | * GNU General Public License for more details. | |
14 | * | |
15 | * You should have received a copy of the GNU General Public License | |
16 | * along with this program; if not, write to the Free Software | |
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
18 | * | |
19 | * Author: Daniel P. Berrange <berrange@redhat.com> | |
20 | */ | |
21 | ||
22 | #ifndef VIRT_VIEWER_APP_H | |
23 | #define VIRT_VIEWER_APP_H | |
24 | ||
25 | #include <glib-object.h> | |
26 | #include "virt-viewer-util.h" | |
27 | #include "virt-viewer-window.h" | |
28 | ||
29 | G_BEGIN_DECLS | |
30 | ||
31 | #define VIRT_VIEWER_TYPE_APP virt_viewer_app_get_type() | |
32 | #define VIRT_VIEWER_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VIRT_VIEWER_TYPE_APP, VirtViewerApp)) | |
33 | #define VIRT_VIEWER_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VIRT_VIEWER_TYPE_APP, VirtViewerAppClass)) | |
34 | #define VIRT_VIEWER_IS_APP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIRT_VIEWER_TYPE_APP)) | |
35 | #define VIRT_VIEWER_IS_APP_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VIRT_VIEWER_TYPE_APP)) | |
36 | #define VIRT_VIEWER_APP_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VIRT_VIEWER_TYPE_APP, VirtViewerAppClass)) | |
37 | ||
38 | typedef struct _VirtViewerAppPrivate VirtViewerAppPrivate; | |
39 | ||
40 | typedef struct { | |
41 | GObject parent; | |
42 | VirtViewerAppPrivate *priv; | |
43 | } VirtViewerApp; | |
44 | ||
45 | typedef struct { | |
46 | GObjectClass parent_class; | |
47 | ||
48 | gboolean (*start) (VirtViewerApp *self); | |
49 | int (*initial_connect) (VirtViewerApp *self); | |
50 | void (*deactivated) (VirtViewerApp *self); | |
51 | } VirtViewerAppClass; | |
52 | ||
53 | GType virt_viewer_app_get_type (void); | |
54 | ||
55 | void virt_viewer_app_set_debug(gboolean debug); | |
56 | gboolean virt_viewer_app_start(VirtViewerApp *app); | |
57 | void virt_viewer_app_quit(VirtViewerApp *self); | |
58 | VirtViewerWindow* virt_viewer_app_get_main_window(VirtViewerApp *self); | |
59 | void virt_viewer_app_trace(VirtViewerApp *self, const char *fmt, ...); | |
60 | void virt_viewer_app_simple_message_dialog(VirtViewerApp *self, const char *fmt, ...); | |
61 | gboolean virt_viewer_app_is_active(VirtViewerApp *app); | |
62 | void virt_viewer_app_free_connect_info(VirtViewerApp *self); | |
63 | int virt_viewer_app_create_session(VirtViewerApp *self, const gchar *type); | |
64 | int virt_viewer_app_activate(VirtViewerApp *self); | |
65 | int virt_viewer_app_initial_connect(VirtViewerApp *self); | |
66 | void virt_viewer_app_start_reconnect_poll(VirtViewerApp *self); | |
67 | void virt_viewer_app_set_zoom_level(VirtViewerApp *self, gint zoom_level); | |
68 | void virt_viewer_app_set_direct(VirtViewerApp *self, gboolean direct); | |
69 | gboolean virt_viewer_app_has_session(VirtViewerApp *self); | |
70 | void virt_viewer_app_set_connect_info(VirtViewerApp *self, | |
71 | const gchar *host, | |
72 | const gchar *ghost, | |
73 | const gchar *gport, | |
74 | const gchar *transport, | |
75 | const gchar *unixsock, | |
76 | const gchar *user, | |
77 | gint port); | |
78 | gboolean virt_viewer_app_window_set_visible(VirtViewerApp *self, VirtViewerWindow *window, gboolean visible); | |
79 | void virt_viewer_app_show_status(VirtViewerApp *self, const gchar *fmt, ...); | |
80 | ||
81 | G_END_DECLS | |
82 | ||
83 | #endif /* VIRT_VIEWER_APP_H */ |
62 | 62 | message = g_strdup_printf("Authentication is required for the %s connection to:\n\n" |
63 | 63 | "<b>%s</b>\n\n", |
64 | 64 | type, |
65 | address ? address : "[unknown]"); | |
65 | address); | |
66 | 66 | } else { |
67 | 67 | message = g_strdup_printf("Authentication is required for the %s connection:\n", |
68 | 68 | type); |
99 | 99 | } |
100 | 100 | |
101 | 101 | static void |
102 | virt_viewer_display_spice_primary_create(SpiceChannel *channel G_GNUC_UNUSED, | |
103 | gint format G_GNUC_UNUSED, | |
104 | gint width, | |
105 | gint height, | |
106 | gint stride G_GNUC_UNUSED, | |
107 | gint shmid G_GNUC_UNUSED, | |
108 | gpointer imgdata G_GNUC_UNUSED, | |
109 | VirtViewerDisplay *display) | |
102 | display_mark(SpiceChannel *channel G_GNUC_UNUSED, | |
103 | gint mark, | |
104 | VirtViewerDisplay *display) | |
110 | 105 | { |
111 | DEBUG_LOG("desktop resize %dx%d", width, height); | |
106 | DEBUG_LOG("display mark %d", mark); | |
112 | 107 | |
113 | virt_viewer_display_set_desktop_size(display, width, height); | |
114 | g_signal_emit_by_name(display, "display-desktop-resize"); | |
108 | virt_viewer_display_set_show_hint(display, mark); | |
109 | } | |
110 | ||
111 | static void | |
112 | primary_create(SpiceChannel *channel G_GNUC_UNUSED, | |
113 | gint format G_GNUC_UNUSED, | |
114 | gint width, | |
115 | gint height, | |
116 | gint stride G_GNUC_UNUSED, | |
117 | gint shmid G_GNUC_UNUSED, | |
118 | gpointer imgdata G_GNUC_UNUSED, | |
119 | VirtViewerDisplay *display) | |
120 | { | |
121 | DEBUG_LOG("spice desktop resize %dx%d", width, height); | |
122 | ||
123 | virt_viewer_display_set_desktop_size(display, width, height); | |
124 | g_signal_emit_by_name(display, "display-desktop-resize"); | |
115 | 125 | } |
116 | 126 | |
117 | 127 | |
120 | 130 | SpiceDisplay *display) |
121 | 131 | { |
122 | 132 | VirtViewerDisplaySpice *self; |
133 | gint channelid; | |
123 | 134 | |
124 | self = g_object_new(VIRT_VIEWER_TYPE_DISPLAY_SPICE, NULL); | |
135 | g_return_val_if_fail(SPICE_IS_DISPLAY_CHANNEL(channel), NULL); | |
136 | g_return_val_if_fail(SPICE_IS_DISPLAY(display), NULL); | |
125 | 137 | |
126 | self->priv->channel = channel; | |
127 | self->priv->display = display; | |
138 | g_object_get(channel, "channel-id", &channelid, NULL); | |
128 | 139 | |
129 | g_object_ref(channel); | |
130 | g_object_ref(display); | |
140 | self = g_object_new(VIRT_VIEWER_TYPE_DISPLAY_SPICE, | |
141 | "nth-display", channelid, | |
142 | NULL); | |
143 | self->priv->channel = g_object_ref(channel); | |
144 | self->priv->display = g_object_ref(display); | |
131 | 145 | |
132 | 146 | g_signal_connect(channel, "display-primary-create", |
133 | G_CALLBACK(virt_viewer_display_spice_primary_create), self); | |
147 | G_CALLBACK(primary_create), self); | |
148 | g_signal_connect(channel, "display-mark", | |
149 | G_CALLBACK(display_mark), self); | |
134 | 150 | |
135 | 151 | gtk_container_add(GTK_CONTAINER(self), GTK_WIDGET(self->priv->display)); |
136 | 152 | gtk_widget_show(GTK_WIDGET(self->priv->display)); |
39 | 39 | #define VIRT_VIEWER_DISPLAY_SPICE_CLASS(klass) \ |
40 | 40 | (G_TYPE_CHECK_CLASS_CAST ((klass), VIRT_VIEWER_TYPE_DISPLAY_SPICE, VirtViewerDisplaySpiceClass)) |
41 | 41 | |
42 | #define VIRT_IS_VIEWER_DISPLAY_SPICE(obj) \ | |
42 | #define VIRT_VIEWER_IS_DISPLAY_SPICE(obj) \ | |
43 | 43 | (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIRT_VIEWER_TYPE_DISPLAY_SPICE)) |
44 | 44 | |
45 | #define VIRT_IS_VIEWER_DISPLAY_SPICE_CLASS(klass) \ | |
45 | #define VIRT_VIEWER_IS_DISPLAY_SPICE_CLASS(klass) \ | |
46 | 46 | (G_TYPE_CHECK_CLASS_TYPE ((klass), VIRT_VIEWER_TYPE_DISPLAY_SPICE)) |
47 | 47 | |
48 | 48 | #define VIRT_VIEWER_DISPLAY_SPICE_GET_CLASS(obj) \ |
38 | 38 | #define VIRT_VIEWER_DISPLAY_VNC_CLASS(klass) \ |
39 | 39 | (G_TYPE_CHECK_CLASS_CAST ((klass), VIRT_VIEWER_TYPE_DISPLAY_VNC, VirtViewerDisplayVncClass)) |
40 | 40 | |
41 | #define VIRT_IS_VIEWER_DISPLAY_VNC(obj) \ | |
41 | #define VIRT_VIEWER_IS_DISPLAY_VNC(obj) \ | |
42 | 42 | (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VIRT_VIEWER_TYPE_DISPLAY_VNC)) |
43 | 43 | |
44 | #define VIRT_IS_VIEWER_DISPLAY_VNC_CLASS(klass) \ | |
44 | #define VIRT_VIEWER_IS_DISPLAY_VNC_CLASS(klass) \ | |
45 | 45 | (G_TYPE_CHECK_CLASS_TYPE ((klass), VIRT_VIEWER_TYPE_DISPLAY_VNC)) |
46 | 46 | |
47 | 47 | #define VIRT_VIEWER_DISPLAY_VNC_GET_CLASS(obj) \ |