diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 12 | ||||
-rw-r--r-- | src/view/ovBox.c | 6 | ||||
-rw-r--r-- | src/virt-viewer-align.c | 89 | ||||
-rw-r--r-- | src/virt-viewer-display-vnc.c | 2 | ||||
-rw-r--r-- | src/virt-viewer-events.c | 14 | ||||
-rw-r--r-- | src/virt-viewer-priv.h | 2 | ||||
-rw-r--r-- | src/virt-viewer.c | 31 |
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) { |