Re-write completely to use Glade, libvirt events, and libvirt-glib integration

This commit is contained in:
Daniel P. Berrange 2008-11-26 13:03:50 -05:00
parent 9951d5e831
commit 61a05530b1
15 changed files with 1233 additions and 492 deletions

View File

@ -25,3 +25,10 @@ Makefile\.in$
^config.h.in$
^man/Makefile$
^man/virt-viewer\.1$
^plugin/\.libs/
^plugin/\.deps/
^plugin/.*\.o
^plugin/.*\.la
^plugin/.*\.so
^plugin/.*\.lo
^plugin/Makefile$

View File

@ -31,7 +31,7 @@ if test "$DIE" -eq 1; then
fi
if test -z "$*"; then
echo "I am going to run ./configure with --enable-warnings - if you "
echo "I am going to run ./configure with not arguments - if you "
echo "wish to pass any extra arguments to it, please specify them on "
echo "the $0 command line."
fi
@ -44,7 +44,7 @@ autoconf
cd $THEDIR
$srcdir/configure --enable-warnings "$@" && {
$srcdir/configure "$@" && {
echo
echo "Now type 'make' to compile virt-viewer."
}

View File

@ -1,5 +1,5 @@
AC_INIT(virt-viewer, 0.0.3)
AC_INIT(virt-viewer, 0.0.4)
AC_CONFIG_SRCDIR(src/main.c)
AM_CONFIG_HEADER(config.h)
dnl Make automake keep quiet about wildcards & other GNUmake-isms
@ -17,8 +17,10 @@ AC_DEFINE([_GNU_SOURCE], [], [Enable GNU extensions])
VIRT_VIEWER_COMPILE_WARNINGS(maximum)
PKG_CHECK_MODULES(LIBXML2, libxml-2.0 >= 2.6.0)
PKG_CHECK_MODULES(LIBVIRT, libvirt >= 0.2.0)
PKG_CHECK_MODULES(LIBVIRT, libvirt >= 0.5.0)
PKG_CHECK_MODULES(LIBVIRT_GLIB, libvirt-glib >= 0.0.1)
PKG_CHECK_MODULES(GTK2, gtk+-2.0 >= 2.10.0)
PKG_CHECK_MODULES(LIBGLADE2, libglade-2.0 >= 2.6.0)
PKG_CHECK_MODULES(GTKVNC, gtk-vnc-1.0 >= 0.3.5)
dnl Decide if this platform can support the SSH tunnel feature.

View File

@ -43,6 +43,10 @@ Specify the hypervisor connection URI
Wait for the domain to start up before attempting to connect to the console
=item -w, --reconnect
Automatically reconnect to the domain if it shuts down and restarts
=item -d, --direct
Do not attempt to tunnel the console over SSH, even if the main connection URI
@ -61,9 +65,9 @@ To connect to the guest with ID 7 running under QEMU
virt-viewer --connect qemu:///system 7
To wait for the guest with UUID 66ab33c0-6919-a3f7-e659-16c82d248521 to
startup and then connect
startup and then connect, also reconnecting upon restart of VM
virt-viewer --wait 66ab33c0-6919-a3f7-e659-16c82d248521
virt-viewer --reconnect --wait 66ab33c0-6919-a3f7-e659-16c82d248521
To connect to a remote console using TLS
@ -72,7 +76,7 @@ To connect to a remote console using TLS
To connect to a remote host using SSH, lookup the guest config and
then make a direct non-tunnelled connection of the console
virt-viewer --connect xen+ssh://root@example.org/ demo
virt-viewer --direct --connect xen+ssh://root@example.org/ demo
=head1 AUTHOR
@ -84,7 +88,7 @@ Report bugs to the mailing list C<http://www.redhat.com/mailman/listinfo/et-mgmt
=head1 COPYRIGHT
Copyright (C) 2007 Red Hat, Inc, and various contributors.
Copyright (C) 2007-2008 Red Hat, Inc, and various contributors.
This is free software. You may redistribute copies of it under the terms of the GNU General
Public License C<http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the extent
permitted by law.

View File

@ -9,13 +9,24 @@ virt_viewer_plugin_la_SOURCES = \
npshell.c npunix.c
virt_viewer_plugin_la_LIBADD = \
@FIREFOX_PLUGIN_LIBS@ \
@GTKVNC_LIBS@ @GTK2_LIBS@ @LIBXML2_LIBS@ @LIBVIRT_LIBS@
@GTKVNC_LIBS@ \
@GTK2_LIBS@ \
@LIBXML2_LIBS@ \
@LIBGLADE2_LIBS@ \
@LIBVIRT_LIBS@ \
@LIBVIRT_GLIB_LIBS@
virt_viewer_plugin_la_LDFLAGS = \
-module -avoid-version
virt_viewer_plugin_la_CFLAGS = \
-DPLUGIN=1 -DENABLE_DEBUG=1 -DDEBUG=1 \
@FIREFOX_PLUGIN_CFLAGS@ \
@GTKVNC_CFLAGS@ @GTK2_CFLAGS@ @LIBXML2_CFLAGS@ @LIBVIRT_CFLAGS@ \
@GTKVNC_CFLAGS@ \
@GTK2_CFLAGS@ \
@LIBXML2_CFLAGS@ \
@LIBGLADE2_CFLAGS@ \
@LIBVIRT_CFLAGS@ \
@LIBVIRT_GLIB_CFLAGS@ \
-DGLADE_DIR="\"$(pkgdatadir)/ui\"" \
@WARN_CFLAGS@ \
-I$(top_srcdir)/src

View File

@ -198,7 +198,7 @@ NPP_New(NPMIMEType pluginType G_GNUC_UNUSED,
This->mode = mode;
This->instance = instance;
This->uri = This->name = NULL;
This->direct = This->waitvnc = 0;
This->direct = This->waitvm = This->reconnect = 0;
/* Read the parameters passed to the plugin. */
for (i = 0; i < argc; i++)
@ -209,8 +209,10 @@ NPP_New(NPMIMEType pluginType G_GNUC_UNUSED,
This->name = strdup (argv[i]);
else if (strcasecmp (argn[i], "direct") == 0)
This->direct = strcmp (argv[i], "1") == 0;
else if (strcasecmp (argn[i], "waitvnc") == 0)
This->waitvnc = strcmp (argv[i], "1") == 0;
else if (strcasecmp (argn[i], "wait") == 0)
This->waitvm = strcmp (argv[i], "1") == 0;
else if (strcasecmp (argn[i], "reconnect") == 0)
This->reconnect = strcmp (argv[i], "1") == 0;
}
return NPERR_NO_ERROR;

View File

@ -41,12 +41,6 @@
#include "virt-viewer-plugin.h"
static GtkWidget *
get_container (void *thisv)
{
PluginInstance *This = (PluginInstance *) thisv;
return This->container;
}
NPError
VirtViewerXSetWindow (NPP instance, NPWindow *window)
@ -88,9 +82,9 @@ VirtViewerXSetWindow (NPP instance, NPWindow *window)
/* Make the VNC widget. */
if (This->uri && This->name) {
debug ("calling viewer_start uri=%s name=%s direct=%d waitvnc=%d container=%p", This->uri, This->name, This->direct, This->waitvnc, This->container);
r = viewer_start (This->uri, This->name, This->direct, This->waitvnc, 1,
get_container, This, 0);
debug ("calling viewer_start uri=%s name=%s direct=%d waitvm=%d reconnect=%d container=%p",
This->uri, This->name, This->direct, This->waitvm, This->reconnect, This->container);
r = viewer_start (This->uri, This->name, This->direct, This->waitvm, This->reconnect, 1, This->container);
if (r != 0)
fprintf (stderr, "viewer_start returned %d != 0\n", r);
}

View File

@ -57,7 +57,7 @@ typedef struct {
GtkWidget *container;
char *uri, *name;
int direct, waitvnc;
gboolean direct, waitvm, reconnect;
} PluginInstance;
extern NPError VirtViewerXSetWindow (NPP instance, NPWindow* window);

View File

@ -1,6 +1,26 @@
bin_PROGRAMS = virt-viewer
gladedir = $(pkgdatadir)/ui
glade_DATA = viewer.glade about.glade auth.glade
EXTRA_DIST = $(glade_DATA)
virt_viewer_SOURCES = main.c viewer.h
virt_viewer_LDADD = @GTKVNC_LIBS@ @GTK2_LIBS@ @LIBXML2_LIBS@ @LIBVIRT_LIBS@ @LIBOBJS@
virt_viewer_CFLAGS = @GTKVNC_CFLAGS@ @GTK2_CFLAGS@ @LIBXML2_CFLAGS@ @LIBVIRT_CFLAGS@ @WARN_CFLAGS@
virt_viewer_LDADD = \
@GTKVNC_LIBS@ \
@GTK2_LIBS@ \
@LIBXML2_LIBS@ \
@LIBGLADE2_LIBS@ \
@LIBVIRT_LIBS@ \
@LIBVIRT_GLIB_LIBS@
virt_viewer_CFLAGS = \
@GTKVNC_CFLAGS@ \
@GTK2_CFLAGS@ \
@LIBXML2_CFLAGS@ \
@LIBGLADE2_CFLAGS@ \
@LIBVIRT_CFLAGS@ \
@LIBVIRT_GLIB_CFLAGS@ \
@WARN_CFLAGS@ \
-DGLADE_DIR="\"$(gladedir)\""

56
src/about.glade Normal file
View File

@ -0,0 +1,56 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.5 on Wed Nov 26 12:15:46 2008 -->
<glade-interface>
<widget class="GtkAboutDialog" id="about">
<property name="border_width">5</property>
<property name="title" translatable="yes">About Glade</property>
<property name="resizable">False</property>
<property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
<property name="has_separator">False</property>
<property name="program_name">Virtual Machine Viewer</property>
<property name="copyright" translatable="yes">Copyright 2007-2008 Daniel P. Berrange
Copyright 2007-2008 Red Hat, Inc.</property>
<property name="comments" translatable="yes">A remote desktop client built with GTK-VNC and libvirt</property>
<property name="website">http://virt-manager.org/</property>
<property name="website_label" translatable="yes">virt-vmanager.org</property>
<property name="license" translatable="yes">This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
</property>
<property name="authors">Daniel P. Berrange</property>
<property name="translator_credits" translatable="yes">The Fedora Translation Team</property>
<signal name="delete_event" handler="about_delete"/>
<signal name="response" handler="about_close"/>
<child internal-child="vbox">
<widget class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="spacing">2</property>
<child>
<placeholder/>
</child>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="dialog-action_area1">
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>

103
src/auth.glade Normal file
View File

@ -0,0 +1,103 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.5 on Wed Nov 26 18:01:48 2008 -->
<glade-interface>
<widget class="GtkDialog" id="auth">
<property name="border_width">5</property>
<property name="title" translatable="yes">Authentication required</property>
<property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<widget class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="spacing">2</property>
<child>
<widget class="GtkTable" id="table1">
<property name="visible">True</property>
<property name="n_rows">2</property>
<property name="n_columns">2</property>
<property name="column_spacing">6</property>
<property name="row_spacing">6</property>
<child>
<widget class="GtkLabel" id="prompt-password">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">Password:</property>
</widget>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="prompt-username">
<property name="visible">True</property>
<property name="xalign">1</property>
<property name="label" translatable="yes">Username:</property>
</widget>
</child>
<child>
<widget class="GtkEntry" id="cred-username">
<property name="visible">True</property>
<property name="can_focus">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="cred-password">
<property name="visible">True</property>
<property name="can_focus">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="dialog-action_area1">
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
<widget class="GtkButton" id="button-cancel">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="label" translatable="yes">gtk-cancel</property>
<property name="use_stock">True</property>
<property name="response_id">-6</property>
</widget>
</child>
<child>
<widget class="GtkButton" id="button-ok">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="label" translatable="yes">gtk-ok</property>
<property name="use_stock">True</property>
<property name="response_id">-5</property>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>

1152
src/main.c

File diff suppressed because it is too large Load Diff

311
src/viewer.glade Normal file
View File

@ -0,0 +1,311 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
<!--Generated with glade3 3.4.5 on Wed Nov 26 17:35:24 2008 -->
<glade-interface>
<widget class="GtkWindow" id="viewer">
<property name="default_width">400</property>
<property name="default_height">400</property>
<child>
<widget class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<child>
<widget class="GtkMenuBar" id="top-menu">
<property name="visible">True</property>
<child>
<widget class="GtkMenuItem" id="menu-file">
<property name="visible">True</property>
<property name="label" translatable="yes">_File</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="menu1">
<property name="visible">True</property>
<child>
<widget class="GtkMenuItem" id="menu-file-screenshot">
<property name="visible">True</property>
<property name="label" translatable="yes">Screenshot</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_file_screenshot"/>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="separatormenuitem1">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkImageMenuItem" id="imagemenuitem5">
<property name="visible">True</property>
<property name="label" translatable="yes">gtk-quit</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="viewer_menu_file_quit"/>
</widget>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-view">
<property name="visible">True</property>
<property name="label" translatable="yes">_View</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="menu2">
<property name="visible">True</property>
<child>
<widget class="GtkCheckMenuItem" id="menu-view-fullscreen">
<property name="visible">True</property>
<property name="label" translatable="yes">Full screen</property>
<property name="use_underline">True</property>
<signal name="toggled" handler="viewer_menu_view_fullscreen"/>
</widget>
</child>
<child>
<widget class="GtkCheckMenuItem" id="menu-view-scale">
<property name="visible">True</property>
<property name="label" translatable="yes">Scale display</property>
<property name="use_underline">True</property>
<signal name="toggled" handler="viewer_menu_view_scale"/>
</widget>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send">
<property name="visible">True</property>
<property name="label" translatable="yes">_Send key</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="menu5">
<property name="visible">True</property>
<child>
<widget class="GtkMenuItem" id="menu-send-cad">
<property name="visible">True</property>
<property name="label" translatable="yes">Ctrl+Alt+_Del</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send" object="cad"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send-cab">
<property name="visible">True</property>
<property name="label" translatable="yes">Ctrl+Alt+_Backspace</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send" object="cab"/>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="separatormenuitem2">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send-caf1">
<property name="visible">True</property>
<property name="label" translatable="yes">Ctrl+Alt+F_1</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send" object="caf1"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send-caf2">
<property name="visible">True</property>
<property name="label" translatable="yes">Ctrl+Alt+F_2</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send" object="caf2"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send-caf3">
<property name="visible">True</property>
<property name="label" translatable="yes">Ctrl+Alt+F_3</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send" object="caf3"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send-caf4">
<property name="visible">True</property>
<property name="label" translatable="yes">Ctrl+Alt+F_4</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send" object="caf4"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send-caf5">
<property name="visible">True</property>
<property name="label" translatable="yes">Ctrl+Alt+F_5</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send" object="caf5"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send-caf6">
<property name="visible">True</property>
<property name="label" translatable="yes">Ctrl+Alt+F_6</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send-caf7">
<property name="visible">True</property>
<property name="label" translatable="yes">Ctrl+Alt+F_7</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send" object="caf7"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send-caf8">
<property name="visible">True</property>
<property name="label" translatable="yes">Ctrl+Alt+F_8</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send" object="caf8"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send-caf9">
<property name="visible">True</property>
<property name="label" translatable="yes">Ctrl+Alt+F_9</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send" object="caf9"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send-caf10">
<property name="visible">True</property>
<property name="label" translatable="yes">Ctrl+Alt+F1_0</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send" object="caf10"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send-caf11">
<property name="visible">True</property>
<property name="label" translatable="yes">Ctrl+Alt+F11</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send" object="caf11"/>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send-caf12">
<property name="visible">True</property>
<property name="label" translatable="yes">Ctrl+Alt+F12</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send" object="caf12"/>
</widget>
</child>
<child>
<widget class="GtkSeparatorMenuItem" id="separatormenuitem3">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-send-print">
<property name="visible">True</property>
<property name="label" translatable="yes">_PrintScreen</property>
<property name="use_underline">True</property>
<signal name="activate" handler="viewer_menu_send" object="printscreen"/>
</widget>
</child>
</widget>
</child>
</widget>
</child>
<child>
<widget class="GtkMenuItem" id="menu-help">
<property name="visible">True</property>
<property name="label" translatable="yes">_Help</property>
<property name="use_underline">True</property>
<child>
<widget class="GtkMenu" id="menu3">
<property name="visible">True</property>
<child>
<widget class="GtkImageMenuItem" id="imagemenuitem10">
<property name="visible">True</property>
<property name="label" translatable="yes">gtk-about</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="viewer_menu_help_about"/>
</widget>
</child>
</widget>
</child>
</widget>
</child>
</widget>
<packing>
<property name="expand">False</property>
</packing>
</child>
<child>
<widget class="GtkNotebook" id="notebook">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="show_border">False</property>
<child>
<widget class="GtkLabel" id="status">
<property name="visible">True</property>
</widget>
</child>
<child>
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="label" translatable="yes">page 1</property>
</widget>
<packing>
<property name="type">tab</property>
<property name="tab_fill">False</property>
</packing>
</child>
<child>
<widget class="GtkScrolledWindow" id="vnc-scroll">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<child>
<widget class="GtkViewport" id="vnc-port">
<property name="visible">True</property>
<property name="resize_mode">GTK_RESIZE_QUEUE</property>
<property name="shadow_type">GTK_SHADOW_NONE</property>
<child>
<widget class="GtkAlignment" id="vnc-align">
<property name="visible">True</property>
<property name="xscale">0</property>
<property name="yscale">0</property>
<child>
<placeholder/>
</child>
</widget>
</child>
</widget>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="label" translatable="yes">page 2</property>
</widget>
<packing>
<property name="type">tab</property>
<property name="position">1</property>
<property name="tab_fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>

View File

@ -23,6 +23,12 @@
#ifndef VIEWER_H
#define VIEWER_H
extern int viewer_start (const char *uri, const char *name, int direct, int waitvnc, int set_verbose, GtkWidget *(*get_toplevel)(void *), void *data, int with_menubar);
extern int viewer_start (const char *uri,
const char *name,
gboolean direct,
gboolean waitvm,
gboolean reconnect,
gboolean verbose,
GtkWidget *container);
#endif /* VIEWER_H */

View File

@ -75,6 +75,11 @@ rm -rf $RPM_BUILD_ROOT
%defattr(-,root,root,-)
%doc README COPYING AUTHORS ChangeLog NEWS
%{_bindir}/%{name}
%dir %{_datadir}/%{name}
%dir %{_datadir}/%{name}/ui/
%{_datadir}/%{name}/ui/auth.glade
%{_datadir}/%{name}/ui/about.glade
%{_datadir}/%{name}/ui/viewer.glade
%{_mandir}/man1/%{name}*
%if %{_with_plugin}