summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2008-03-07 12:53:56 -0500
committerDaniel P. Berrange <berrange@redhat.com>2008-03-07 12:53:56 -0500
commitcfde34bf4c20c2c19a5ad75df707ef2b40f2bce1 (patch)
tree1cc6c3bfaeed161ab1f94f14277f18d1013084da
parent0154dca5b9ab76f37f666923fc4dc52409d50d28 (diff)
downloadvirt-viewer-cfde34bf4c20c2c19a5ad75df707ef2b40f2bce1.tar.gz
virt-viewer-cfde34bf4c20c2c19a5ad75df707ef2b40f2bce1.tar.xz
virt-viewer-cfde34bf4c20c2c19a5ad75df707ef2b40f2bce1.zip
Added support for desktop scaling with OpenGL
-rw-r--r--src/main.c57
-rw-r--r--virt-viewer.spec.in9
2 files changed, 58 insertions, 8 deletions
diff --git a/src/main.c b/src/main.c
index 9df2b09..4997f32 100644
--- a/src/main.c
+++ b/src/main.c
@@ -156,6 +156,26 @@ static void viewer_disconnected(GtkWidget *vnc G_GNUC_UNUSED)
gtk_main_quit();
}
+static void viewer_fullscreen(GtkWidget *menu, GtkWidget *window)
+{
+ if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menu))) {
+ gtk_window_fullscreen(GTK_WINDOW(window));
+ } else {
+ gtk_window_unfullscreen(GTK_WINDOW(window));
+ }
+}
+
+static void viewer_scalable(GtkWidget *menu, GtkWidget *vnc)
+{
+ if (gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(menu))) {
+ printf("On\n");
+ vnc_display_set_scaling(VNC_DISPLAY(vnc), TRUE);
+ } else {
+ printf("Off\n");
+ vnc_display_set_scaling(VNC_DISPLAY(vnc), FALSE);
+ }
+}
+
static void viewer_send_key(GtkWidget *menu, GtkWidget *vnc)
{
int i;
@@ -397,6 +417,30 @@ static GtkWidget *viewer_build_file_menu(VncDisplay *vnc)
return file;
}
+static GtkWidget *viewer_build_view_menu(VncDisplay *vnc, GtkWidget *window)
+{
+ GtkWidget *view;
+ GtkWidget *viewmenu;
+ GtkWidget *fullscreen;
+ GtkWidget *scalable;
+
+ view = gtk_menu_item_new_with_mnemonic("_View");
+
+ viewmenu = gtk_menu_new();
+ gtk_menu_item_set_submenu(GTK_MENU_ITEM(view), viewmenu);
+
+ fullscreen = gtk_check_menu_item_new_with_mnemonic("_Fullscreen");
+ gtk_menu_append(GTK_MENU(viewmenu), fullscreen);
+ g_signal_connect(fullscreen, "toggled", GTK_SIGNAL_FUNC(viewer_fullscreen), window);
+
+ scalable = gtk_check_menu_item_new_with_mnemonic("_Scale display");
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(scalable), TRUE);
+ gtk_menu_append(GTK_MENU(viewmenu), scalable);
+ g_signal_connect(scalable, "toggled", GTK_SIGNAL_FUNC(viewer_scalable), vnc);
+
+ return view;
+}
+
static GtkWidget *viewer_build_sendkey_menu(VncDisplay *vnc)
{
GtkWidget *sendkey;
@@ -441,20 +485,23 @@ static GtkWidget *viewer_build_help_menu(void)
return help;
}
-static GtkWidget *viewer_build_menu(VncDisplay *vnc)
+static GtkWidget *viewer_build_menu(VncDisplay *vnc, GtkWidget *window)
{
GtkWidget *menubar;
GtkWidget *file;
+ GtkWidget *view;
GtkWidget *sendkey;
GtkWidget *help;
menubar = gtk_menu_bar_new();
file = viewer_build_file_menu(vnc);
+ view = viewer_build_view_menu(vnc, window);
sendkey = viewer_build_sendkey_menu(vnc);
help = viewer_build_help_menu();
gtk_menu_bar_append(GTK_MENU_BAR(menubar), file);
+ gtk_menu_bar_append(GTK_MENU_BAR(menubar), view);
gtk_menu_bar_append(GTK_MENU_BAR(menubar), sendkey);
gtk_menu_bar_append(GTK_MENU_BAR(menubar), help);
@@ -477,13 +524,14 @@ static GtkWidget *viewer_build_window(VncDisplay *vnc,
* In both cases they are GTK_CONTAINERs and NOT resizable.
*/
window = get_toplevel (data);
+ gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
if (with_menubar) {
layout = gtk_vbox_new(FALSE, 3);
- menubar = viewer_build_menu(vnc);
+ menubar = viewer_build_menu(vnc, window);
gtk_container_add(GTK_CONTAINER(window), layout);
- gtk_container_add(GTK_CONTAINER(layout), menubar);
- gtk_container_add(GTK_CONTAINER(layout), GTK_WIDGET(vnc));
+ gtk_container_add_with_properties(GTK_CONTAINER(layout), menubar, "expand", FALSE, NULL);
+ gtk_container_add_with_properties(GTK_CONTAINER(layout), GTK_WIDGET(vnc), "expand", TRUE, NULL);
} else
gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(vnc));
@@ -795,6 +843,7 @@ viewer_start (const char *uri, const char *name,
vnc_display_set_keyboard_grab(VNC_DISPLAY(vnc), TRUE);
vnc_display_set_pointer_grab(VNC_DISPLAY(vnc), TRUE);
+ vnc_display_set_scaling(VNC_DISPLAY(vnc), TRUE);
if (fd >= 0)
vnc_display_open_fd(VNC_DISPLAY(vnc), fd);
diff --git a/virt-viewer.spec.in b/virt-viewer.spec.in
index 708a43c..1f0c65e 100644
--- a/virt-viewer.spec.in
+++ b/virt-viewer.spec.in
@@ -6,15 +6,16 @@ Release: 1%{?dist}%{?extra_release}
Summary: Virtual Machine Viewer
Group: Applications/System
-License: GPL
+License: GPLv2+
URL: http://virt-manager.org/
Source0: http://virt-manager.org/download/sources/%{name}/%{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+Requires: openssh-clients
BuildRequires: gtk2-devel
BuildRequires: libvirt-devel
BuildRequires: libxml2-devel
-BuildRequires: gtk-vnc-devel >= 0.1.0
+BuildRequires: gtk-vnc-devel >= 0.3.4
BuildRequires: /usr/bin/pod2man
%description
@@ -27,12 +28,12 @@ and libvirt for looking up VNC server details.
%build
%configure
-make %{?_smp_mflags}
+%__make %{?_smp_mflags}
%install
rm -rf $RPM_BUILD_ROOT
-make install DESTDIR=$RPM_BUILD_ROOT
+%__make install DESTDIR=$RPM_BUILD_ROOT
%clean
rm -rf $RPM_BUILD_ROOT