Patch to cure the segfault and test program attached. Rich. -- Emerging Technologies, Red Hat - http://et.redhat.com/~rjones/ Registered Address: Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SL4 1TE, United Kingdom. Registered in England and Wales under Company Registration No. 03798903
diff -r e8d37fb527c2 src/vncdisplay.c
--- a/src/vncdisplay.c Tue Jan 15 13:28:03 2008 +0000
+++ b/src/vncdisplay.c Tue Jan 15 13:59:14 2008 +0000
@@ -536,8 +536,10 @@ static gboolean on_resize(void *opaque,
if (priv->gvnc == NULL || !gvnc_is_initialized(priv->gvnc))
return TRUE;
- if (priv->image)
+ if (priv->image) {
g_object_unref(priv->image);
+ priv->image = NULL;
+ }
if (priv->gc == NULL) {
priv->null_cursor = create_null_cursor();
@@ -549,20 +551,22 @@ static gboolean on_resize(void *opaque,
}
visual = gdk_drawable_get_visual(GTK_WIDGET(obj)->window);
-
- priv->image = gdk_image_new(GDK_IMAGE_FASTEST, visual, width, height);
- priv->fb.red_mask = visual->red_mask >> visual->red_shift;
- priv->fb.green_mask = visual->green_mask >> visual->green_shift;
- priv->fb.blue_mask = visual->blue_mask >> visual->blue_shift;
- priv->fb.red_shift = visual->red_shift;
- priv->fb.green_shift = visual->green_shift;
- priv->fb.blue_shift = visual->blue_shift;
- priv->fb.depth = priv->image->depth;
- priv->fb.bpp = priv->image->bpp;
- priv->fb.width = priv->image->width;
- priv->fb.height = priv->image->height;
- priv->fb.linesize = priv->image->bpl;
- priv->fb.data = (uint8_t *)priv->image->mem;
+ if (visual) {
+ priv->image =
+ gdk_image_new(GDK_IMAGE_FASTEST, visual, width, height);
+ priv->fb.red_mask = visual->red_mask >> visual->red_shift;
+ priv->fb.green_mask = visual->green_mask >> visual->green_shift;
+ priv->fb.blue_mask = visual->blue_mask >> visual->blue_shift;
+ priv->fb.red_shift = visual->red_shift;
+ priv->fb.green_shift = visual->green_shift;
+ priv->fb.blue_shift = visual->blue_shift;
+ priv->fb.depth = priv->image->depth;
+ priv->fb.bpp = priv->image->bpp;
+ priv->fb.width = priv->image->width;
+ priv->fb.height = priv->image->height;
+ priv->fb.linesize = priv->image->bpl;
+ priv->fb.data = (uint8_t *)priv->image->mem;
+ }
gtk_widget_set_size_request(GTK_WIDGET(obj), width, height);
#include <stdio.h>
#include <gtk/gtk.h>
#include "vncdisplay.h"
#define HOST "192.168.2.129"
#define PORT "5900"
#define USERNAME "" /* Set username and/or password here */
#define PASSWORD ""
static void destroy( GtkWidget *widget,
gpointer data )
{
gtk_main_quit ();
}
int main( int argc,
char *argv[] )
{
static GtkWidget *window;
GtkWidget *vnc;
gtk_init (&argc, &argv);
/* Create a new dialog window for the scrolled window to be
* packed into. */
window = gtk_dialog_new ();
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (destroy), NULL);
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
gtk_widget_set_size_request (window, 300, 300);
/* Create a Gtk-VNC widget, but don't pack it. */
vnc = vnc_display_new ();
gtk_widget_show (vnc);
vnc_display_open_host (VNC_DISPLAY (vnc), HOST, PORT);
vnc_display_set_credential (VNC_DISPLAY (vnc),
VNC_DISPLAY_CREDENTIAL_USERNAME, USERNAME);
vnc_display_set_credential (VNC_DISPLAY (vnc),
VNC_DISPLAY_CREDENTIAL_PASSWORD, PASSWORD);
gtk_widget_show (window);
gtk_main();
return 0;
}
Attachment:
smime.p7s
Description: S/MIME Cryptographic Signature