summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am12
-rw-r--r--src/view/ovBox.c6
-rw-r--r--src/virt-viewer-align.c89
-rw-r--r--src/virt-viewer-display-vnc.c2
-rw-r--r--src/virt-viewer-events.c14
-rw-r--r--src/virt-viewer-priv.h2
-rw-r--r--src/virt-viewer.c31
7 files changed, 119 insertions, 37 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 59d15a6..a9e433f 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -33,18 +33,18 @@ virt_viewer_SOURCES += \
endif
virt_viewer_LDADD = \
- @GTKVNC_LIBS@ \
- @SPICEGTK_LIBS@ \
+ @GTK_VNC_LIBS@ \
+ @SPICE_GTK_LIBS@ \
@GLIB2_LIBS@ \
- @GTK2_LIBS@ \
+ @GTK_LIBS@ \
@LIBXML2_LIBS@ \
@LIBVIRT_LIBS@
virt_viewer_CFLAGS = \
- @GTKVNC_CFLAGS@ \
- @SPICEGTK_CFLAGS@ \
+ @GTK_VNC_CFLAGS@ \
+ @SPICE_GTK_CFLAGS@ \
@GLIB2_CFLAGS@ \
- @GTK2_CFLAGS@ \
+ @GTK_CFLAGS@ \
@LIBXML2_CFLAGS@ \
@LIBVIRT_CFLAGS@ \
@WARN_CFLAGS@ \
diff --git a/src/view/ovBox.c b/src/view/ovBox.c
index 955c20b..8b450d0 100644
--- a/src/view/ovBox.c
+++ b/src/view/ovBox.c
@@ -475,7 +475,6 @@ ViewOvBoxUnrealize(GtkWidget *widget) // IN
*
*-----------------------------------------------------------------------------
*/
-
static void
ViewOvBoxSizeRequest(GtkWidget *widget, // IN
GtkRequisition *requisition) // OUT
@@ -505,7 +504,7 @@ ViewOvBoxSizeRequest(GtkWidget *widget, // IN
requisition->height = MAX(underR.height + min, priv->overR.height);
}
-#ifdef WITH_GTK3
+#if GTK_CHECK_VERSION(3, 0, 0)
static void
ViewOvBox_get_preferred_width (GtkWidget *widget,
gint *minimal_width,
@@ -529,7 +528,6 @@ ViewOvBox_get_preferred_height (GtkWidget *widget,
*minimal_height = *natural_height = requisition.height;
}
-#else
#endif
@@ -712,7 +710,7 @@ ViewOvBoxClassInit(ViewOvBoxClass *klass) // IN
widgetClass->unmap = ViewOvBoxUnmap;
widgetClass->realize = ViewOvBoxRealize;
widgetClass->unrealize = ViewOvBoxUnrealize;
-#if WITH_GTK3
+#if GTK_CHECK_VERSION(3, 0, 0)
widgetClass->get_preferred_width = ViewOvBox_get_preferred_width;
widgetClass->get_preferred_height = ViewOvBox_get_preferred_height;
#else
diff --git a/src/virt-viewer-align.c b/src/virt-viewer-align.c
index ab42fed..e1e056d 100644
--- a/src/virt-viewer-align.c
+++ b/src/virt-viewer-align.c
@@ -25,6 +25,7 @@
#include <locale.h>
#include "virt-viewer-align.h"
+#include "virt-viewer-util.h"
#define VIRT_VIEWER_ALIGN_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), VIRT_VIEWER_TYPE_ALIGN, VirtViewerAlignPrivate))
@@ -40,6 +41,14 @@ struct _VirtViewerAlignPrivate
static void virt_viewer_align_size_request(GtkWidget *widget,
GtkRequisition *requisition);
+#if GTK_CHECK_VERSION(3, 0, 0)
+static void virt_viewer_align_get_preferred_width(GtkWidget *widget,
+ int *minwidth,
+ int *defwidth);
+static void virt_viewer_align_get_preferred_height(GtkWidget *widget,
+ int *minheight,
+ int *defheight);
+#endif
static void virt_viewer_align_size_allocate(GtkWidget *widget,
GtkAllocation *allocation);
static void virt_viewer_align_set_property(GObject *object,
@@ -70,11 +79,16 @@ virt_viewer_align_class_init(VirtViewerAlignClass *class)
gobject_class = (GObjectClass*) class;
widget_class = (GtkWidgetClass*) class;
-
+
gobject_class->set_property = virt_viewer_align_set_property;
gobject_class->get_property = virt_viewer_align_get_property;
+#if GTK_CHECK_VERSION(3, 0, 0)
+ widget_class->get_preferred_width = virt_viewer_align_get_preferred_width;
+ widget_class->get_preferred_height = virt_viewer_align_get_preferred_height;
+#else
widget_class->size_request = virt_viewer_align_size_request;
+#endif
widget_class->size_allocate = virt_viewer_align_size_allocate;
g_object_class_install_property(gobject_class,
@@ -111,8 +125,8 @@ virt_viewer_align_class_init(VirtViewerAlignClass *class)
400,
100,
G_PARAM_READWRITE));
-
- g_type_class_add_private(gobject_class, sizeof(VirtViewerAlignPrivate));
+
+ g_type_class_add_private(gobject_class, sizeof(VirtViewerAlignPrivate));
}
static void
@@ -203,9 +217,10 @@ virt_viewer_align_size_request(GtkWidget *widget,
{
VirtViewerAlign *align = VIRT_VIEWER_ALIGN(widget);
VirtViewerAlignPrivate *priv = align->priv;
+ int border_width = gtk_container_get_border_width(GTK_CONTAINER(widget));
- requisition->width = GTK_CONTAINER(widget)->border_width * 2;
- requisition->height = GTK_CONTAINER(widget)->border_width * 2;
+ requisition->width = border_width * 2;
+ requisition->height = border_width * 2;
if (priv->dirty) {
if (priv->zoom)
@@ -224,11 +239,37 @@ virt_viewer_align_size_request(GtkWidget *widget,
requisition->height += 50;
}
- if (priv->dirty) {
- g_idle_add(virt_viewer_align_idle, widget);
- priv->dirty = FALSE;
- }
+ DEBUG_LOG("Align size request %dx%d (preferred %dx%d)",
+ requisition->width, requisition->height,
+ priv->preferred_width, priv->preferred_height);
+}
+
+
+#if GTK_CHECK_VERSION(3, 0, 0)
+static void virt_viewer_align_get_preferred_width(GtkWidget *widget,
+ int *minwidth,
+ int *defwidth)
+{
+ GtkRequisition req;
+
+ virt_viewer_align_size_request(widget, &req);
+
+ *minwidth = *defwidth = req.width;
+}
+
+
+static void virt_viewer_align_get_preferred_height(GtkWidget *widget,
+ int *minheight,
+ int *defheight)
+{
+ GtkRequisition req;
+
+ virt_viewer_align_size_request(widget, &req);
+
+ *minheight = *defheight = req.height;
}
+#endif
+
static void
virt_viewer_align_size_allocate(GtkWidget *widget,
@@ -242,13 +283,15 @@ virt_viewer_align_size_allocate(GtkWidget *widget,
gint border_width;
double preferredAspect;
double actualAspect;
+ GtkWidget *child = gtk_bin_get_child(bin);
+
+ DEBUG_LOG("Allocated %dx%d", allocation->width, allocation->height);
+ gtk_widget_set_allocation(widget, allocation);
- widget->allocation = *allocation;
-
preferredAspect = (double)priv->preferred_width / (double)priv->preferred_height;
- if (bin->child && gtk_widget_get_visible(bin->child)) {
- border_width = GTK_CONTAINER(align)->border_width;
+ if (child && gtk_widget_get_visible(child)) {
+ border_width = gtk_container_get_border_width(GTK_CONTAINER(align));
width = MAX(1, allocation->width - 2 * border_width);
height = MAX(1, allocation->height - 2 * border_width);
@@ -265,7 +308,17 @@ virt_viewer_align_size_allocate(GtkWidget *widget,
child_allocation.x = 0.5 * (width - child_allocation.width) + allocation->x + border_width;
child_allocation.y = 0.5 * (height - child_allocation.height) + allocation->y + border_width;
- gtk_widget_size_allocate(bin->child, &child_allocation);
+ DEBUG_LOG("Child allocate %dx%d", child_allocation.width, child_allocation.height);
+ gtk_widget_size_allocate(child, &child_allocation);
+ }
+
+
+ /* This unsets the size request, so that the user can
+ * manually resize the window smaller again
+ */
+ if (priv->dirty) {
+ g_idle_add(virt_viewer_align_idle, widget);
+ priv->dirty = FALSE;
}
}
@@ -287,7 +340,7 @@ void virt_viewer_align_set_zoom_level(VirtViewerAlign *align,
guint zoom)
{
VirtViewerAlignPrivate *priv = align->priv;
- GtkBin *bin = GTK_BIN(align);
+ GtkWidget *child = gtk_bin_get_child(GTK_BIN(align));
if (zoom < 10)
zoom = 10;
@@ -295,7 +348,7 @@ void virt_viewer_align_set_zoom_level(VirtViewerAlign *align,
zoom = 400;
priv->zoom_level = zoom;
- if (bin->child && gtk_widget_get_visible(bin->child)) {
+ if (child && gtk_widget_get_visible(child)) {
priv->dirty = TRUE;
gtk_widget_queue_resize(GTK_WIDGET(align));
}
@@ -324,10 +377,10 @@ void virt_viewer_align_set_zoom(VirtViewerAlign *align,
gboolean zoom)
{
VirtViewerAlignPrivate *priv = align->priv;
- GtkBin *bin = GTK_BIN(align);
+ GtkWidget *child = gtk_bin_get_child(GTK_BIN(align));
priv->zoom = zoom;
- if (bin->child && gtk_widget_get_visible(bin->child)) {
+ if (child && gtk_widget_get_visible(child)) {
priv->dirty = TRUE;
gtk_widget_queue_resize(GTK_WIDGET(align));
}
diff --git a/src/virt-viewer-display-vnc.c b/src/virt-viewer-display-vnc.c
index 02f5636..41f8c89 100644
--- a/src/virt-viewer-display-vnc.c
+++ b/src/virt-viewer-display-vnc.c
@@ -155,7 +155,7 @@ static void
virt_viewer_display_vnc_bell(VirtViewer *viewer,
gpointer data G_GNUC_UNUSED)
{
- gdk_window_beep(GTK_WIDGET(viewer->window)->window);
+ gdk_window_beep(gtk_widget_get_window(GTK_WIDGET(viewer->window)));
}
static void
diff --git a/src/virt-viewer-events.c b/src/virt-viewer-events.c
index d7d2c9b..108f97d 100644
--- a/src/virt-viewer-events.c
+++ b/src/virt-viewer-events.c
@@ -63,7 +63,7 @@ virt_viewer_events_dispatch_handle(GIOChannel *source G_GNUC_UNUSED,
if (condition & G_IO_ERR)
events |= VIR_EVENT_HANDLE_ERROR;
- DEBUG_LOG("Dispatch handler %d %d %p\n", data->fd, events, data->opaque);
+ DEBUG_LOG("Dispatch handler %d %d %p", data->fd, events, data->opaque);
(data->cb)(data->watch, data->fd, events, data->opaque);
@@ -98,7 +98,7 @@ int virt_viewer_events_add_handle(int fd,
data->channel = g_io_channel_unix_new(fd);
data->ff = ff;
- DEBUG_LOG("Add handle %d %d %p\n", data->fd, events, data->opaque);
+ DEBUG_LOG("Add handle %d %d %p", data->fd, events, data->opaque);
data->source = g_io_add_watch(data->channel,
cond,
@@ -170,7 +170,7 @@ virt_viewer_events_remove_handle(int watch)
return -1;
}
- DEBUG_LOG("Remove handle %d %d\n", watch, data->fd);
+ DEBUG_LOG("Remove handle %d %d", watch, data->fd);
g_source_remove(data->source);
data->source = 0;
@@ -201,7 +201,7 @@ static gboolean
virt_viewer_events_dispatch_timeout(void *opaque)
{
struct virt_viewer_events_timeout *data = opaque;
- DEBUG_LOG("Dispatch timeout %p %p %d %p\n", data, data->cb, data->timer, data->opaque);
+ DEBUG_LOG("Dispatch timeout %p %p %d %p", data, data->cb, data->timer, data->opaque);
(data->cb)(data->timer, data->opaque);
return TRUE;
@@ -231,7 +231,7 @@ virt_viewer_events_add_timeout(int interval,
timeouts[ntimeouts++] = data;
- DEBUG_LOG("Add timeout %p %d %p %p %d\n", data, interval, cb, opaque, data->timer);
+ DEBUG_LOG("Add timeout %p %d %p %p %d", data, interval, cb, opaque, data->timer);
return data->timer;
}
@@ -260,7 +260,7 @@ virt_viewer_events_update_timeout(int timer,
return;
}
- DEBUG_LOG("Update timeout %p %d %d\n", data, timer, interval);
+ DEBUG_LOG("Update timeout %p %d %d", data, timer, interval);
if (interval >= 0) {
if (data->source)
@@ -289,7 +289,7 @@ virt_viewer_events_remove_timeout(int timer)
return -1;
}
- DEBUG_LOG("Remove timeout %p %d\n", data, timer);
+ DEBUG_LOG("Remove timeout %p %d", data, timer);
if (!data->source)
return -1;
diff --git a/src/virt-viewer-priv.h b/src/virt-viewer-priv.h
index 074e67a..0cc16af 100644
--- a/src/virt-viewer-priv.h
+++ b/src/virt-viewer-priv.h
@@ -102,6 +102,8 @@ struct _VirtViewerSize {
VirtViewer *viewer;
gint width, height;
gulong sig_id;
+ gulong sig_id_h;
+ gulong sig_id_w;
};
void virt_viewer_connected(VirtViewer *viewer);
diff --git a/src/virt-viewer.c b/src/virt-viewer.c
index 9f3d1b2..87efa62 100644
--- a/src/virt-viewer.c
+++ b/src/virt-viewer.c
@@ -81,6 +81,26 @@ static const char * const menuNames[LAST_MENU] = {
};
+#if GTK_CHECK_VERSION(3, 0, 0)
+#define GDK_Control_L GDK_KEY_Control_L
+#define GDK_Alt_L GDK_KEY_Alt_L
+#define GDK_Delete GDK_KEY_Delete
+#define GDK_BackSpace GDK_KEY_BackSpace
+#define GDK_Print GDK_KEY_Print
+#define GDK_F1 GDK_KEY_F1
+#define GDK_F2 GDK_KEY_F2
+#define GDK_F3 GDK_KEY_F3
+#define GDK_F4 GDK_KEY_F4
+#define GDK_F5 GDK_KEY_F5
+#define GDK_F6 GDK_KEY_F6
+#define GDK_F7 GDK_KEY_F7
+#define GDK_F8 GDK_KEY_F8
+#define GDK_F9 GDK_KEY_F9
+#define GDK_F10 GDK_KEY_F10
+#define GDK_F11 GDK_KEY_F11
+#define GDK_F12 GDK_KEY_F12
+#endif
+
#define MAX_KEY_COMBO 3
struct keyComboDef {
guint keys[MAX_KEY_COMBO];
@@ -184,7 +204,7 @@ virt_viewer_resize_main_window(VirtViewer *viewer)
gtk_window_resize(GTK_WINDOW (viewer->window), 1, 1);
- screen = gdk_drawable_get_screen(gtk_widget_get_window(viewer->window));
+ screen = gtk_widget_get_screen(viewer->window);
gdk_screen_get_monitor_geometry(screen,
gdk_screen_get_monitor_at_window
(screen, gtk_widget_get_window(viewer->window)),
@@ -209,6 +229,10 @@ virt_viewer_resize_main_window(VirtViewer *viewer)
height = viewer->desktopHeight;
}
+ DEBUG_LOG("Decided todo %dx%d (desktop is %dx%d, fullscreen is %dx%d",
+ width, height, viewer->desktopWidth, viewer->desktopHeight,
+ fullscreen.width, fullscreen.height);
+
virt_viewer_align_set_preferred_size(VIRT_VIEWER_ALIGN(viewer->align),
width, height);
}
@@ -1322,6 +1346,8 @@ virt_viewer_start(const char *uri,
viewer->domkey = g_strdup(name);
viewer->uri = g_strdup(uri);
+ viewer->desktopWidth = viewer->desktopHeight = 400;
+
g_value_init(&viewer->accelSetting, G_TYPE_STRING);
virt_viewer_events_register();
@@ -1380,6 +1406,9 @@ virt_viewer_start(const char *uri,
viewer->container = window;
viewer->window = window;
gtk_window_set_resizable(GTK_WINDOW(window), TRUE);
+#if GTK_CHECK_VERSION(3, 0, 0)
+ gtk_window_set_has_resize_grip(GTK_WINDOW(window), FALSE);
+#endif
viewer->accelEnabled = TRUE;
accels = gtk_accel_groups_from_object(G_OBJECT(window));
for ( ; accels ; accels = accels->next) {