diff options
-rw-r--r-- | vnc-client.c | 22 | ||||
-rw-r--r-- | vnc.c | 18 |
2 files changed, 36 insertions, 4 deletions
diff --git a/vnc-client.c b/vnc-client.c index 479428c..94f3507 100644 --- a/vnc-client.c +++ b/vnc-client.c @@ -20,7 +20,7 @@ static void usage(FILE *fp) fprintf(fp, "This is a simple vnc client\n" "\n" - "usage: vnc-client [options] hostname displayno\n" + "usage: vnc-client [options] display\n" "options:\n" " -h Print this text.\n" " -d Enable debug output.\n" @@ -35,6 +35,8 @@ int main(int argc, char *argv[]) { unsigned long vnc_flags = VNC_FLAG_STANDALONE; + char hostname[65]; + int displayno, port; int debug = 0; int c; @@ -61,12 +63,24 @@ main(int argc, char *argv[]) } } - if (optind+2 > argc) { + if (optind+1 > argc) { usage(stderr); exit(1); } - - if (NULL == vnc_open(argv[optind], atoi(argv[optind+1]), vnc_flags, debug)) + + if (2 == sscanf(argv[optind], "%64[^:]:%d", hostname, &displayno)) + goto connect; + if (2 == sscanf(argv[optind], "%64[^:]::%d", hostname, &port)) { + displayno = port - 5900; + if (displayno >= 0) + goto connect; + } + + usage(stderr); + exit(1); + + connect: + if (NULL == vnc_open(hostname, displayno, vnc_flags, debug)) exit(1); gtk_main(); @@ -428,6 +428,17 @@ static GdkFilterReturn event_filter(GdkXEvent *gdkxevent, GdkEvent *gtkevent, fprintf(stderr, "%s: KeymapNotify\n", __FUNCTION__); return GDK_FILTER_REMOVE; + case 2: + case 3: + case 7: + case 8: + case 9: + case 10: + case 15: + case 16: + case 18: + case 21: + case Expose: // 12 case MapNotify: // 19 case ConfigureNotify: // 22 @@ -503,6 +514,7 @@ GtkWidget *vnc_open(char *hostname, int displayno, unsigned long flags, vnc->draw = gtk_drawing_area_new(); gtk_container_add(GTK_CONTAINER(vnc->win), vnc->draw); GTK_WIDGET_SET_FLAGS(vnc->draw, GTK_CAN_FOCUS); +#if 1 gtk_widget_add_events(vnc->draw, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | @@ -510,6 +522,10 @@ GtkWidget *vnc_open(char *hostname, int displayno, unsigned long flags, GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_EXPOSURE_MASK); +#else + gtk_widget_add_events(vnc->win, GDK_ALL_EVENTS_MASK); + gtk_widget_add_events(vnc->draw, GDK_ALL_EVENTS_MASK); +#endif gtk_widget_set_app_paintable(vnc->draw, TRUE); gtk_widget_set_double_buffered(vnc->draw, FALSE); g_signal_connect(G_OBJECT(vnc->draw), "expose-event", @@ -546,7 +562,9 @@ GtkWidget *vnc_open(char *hostname, int displayno, unsigned long flags, ButtonReleaseMask | PointerMotionMask | KeymapStateMask); + gdk_window_add_filter(vnc->win->window, event_filter, vnc); #endif + gdk_window_add_filter(vnc->draw->window, event_filter, vnc); vnc->filter_installed = 1; return vnc->win; |