aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vnc-client.c22
-rw-r--r--vnc.c18
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();
diff --git a/vnc.c b/vnc.c
index 0d488f0..9b4bab9 100644
--- a/vnc.c
+++ b/vnc.c
@@ -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;