diff options
author | kraxel <kraxel> | 2007-02-01 12:36:43 +0000 |
---|---|---|
committer | kraxel <kraxel> | 2007-02-01 12:36:43 +0000 |
commit | cbd9777e41ce186c9ef2e060aea5dab9647f1b4e (patch) | |
tree | 40422687b4c1154b6e253a2a30f62d148e91d53f | |
parent | d13cc346960b4ed1816310430136f742ccb24393 (diff) | |
download | xenwatch-cbd9777e41ce186c9ef2e060aea5dab9647f1b4e.tar.gz |
ptr on/off
-rw-r--r-- | vnc.c | 24 |
1 files changed, 21 insertions, 3 deletions
@@ -34,7 +34,7 @@ struct vnc_window { /* gtk */ GtkWidget *win; GtkWidget *draw; - GtkWidget *line, *res, *kbd, *view; + GtkWidget *line, *res, *kbd, *ptr, *view; GdkCursor *on,*off; int filter_installed; int input_grabbed; @@ -138,6 +138,8 @@ static void vnc_window_texts(struct vnc_window *vnc) gtk_label_set_text(GTK_LABEL(vnc->res), textline); gtk_button_set_label(GTK_BUTTON(vnc->kbd), vnc->uskbd ? "kbd: us" : "kbd: local"); + gtk_button_set_label(GTK_BUTTON(vnc->ptr), + vnc->showpointer ? "show pointer" : "hide pointer"); gtk_button_set_label(GTK_BUTTON(vnc->view), vnc->viewonly ? "viewonly" : "input ok"); } @@ -149,8 +151,8 @@ static void vnc_window_conf(struct vnc_window *vnc) vnc_window_texts(vnc); gtk_widget_set_size_request(vnc->draw, vnc->client->width, vnc->client->height); if (vnc->draw->window) { - if (!vnc->showpointer) - gdk_window_set_cursor(vnc->draw->window, vnc->off); + gdk_window_set_cursor(vnc->draw->window, + vnc->showpointer ? vnc->on : vnc->off); XAddInput(vnc->dpy, gdk_x11_drawable_get_xid(vnc->draw->window), KeymapStateMask); } @@ -520,6 +522,17 @@ static void kbd_btn(GtkWidget *widget, gpointer data) vnc_window_texts(vnc); } +static void ptr_btn(GtkWidget *widget, gpointer data) +{ + struct vnc_window *vnc = data; + + vnc->showpointer = !vnc->showpointer; + if (vnc->draw->window) + gdk_window_set_cursor(vnc->draw->window, + vnc->showpointer ? vnc->on : vnc->off); + vnc_window_texts(vnc); +} + static void view_btn(GtkWidget *widget, gpointer data) { struct vnc_window *vnc = data; @@ -659,12 +672,16 @@ GtkWidget *vnc_open(char *hostname, int tcpport, unsigned long flags, vnc->line = gtk_label_new("status line"); vnc->res = gtk_label_new("vnc screen resolution"); vnc->kbd = gtk_button_new_with_label("keyboard mode"); + vnc->ptr = gtk_button_new_with_label("mouse mode"); vnc->view = gtk_button_new_with_label("input mode"); g_signal_connect(G_OBJECT(vnc->kbd), "clicked", G_CALLBACK(kbd_btn), vnc); + g_signal_connect(G_OBJECT(vnc->ptr), "clicked", + G_CALLBACK(ptr_btn), vnc); g_signal_connect(G_OBJECT(vnc->view), "clicked", G_CALLBACK(view_btn), vnc); GTK_WIDGET_UNSET_FLAGS(vnc->kbd, GTK_CAN_FOCUS); + GTK_WIDGET_UNSET_FLAGS(vnc->ptr, GTK_CAN_FOCUS); GTK_WIDGET_UNSET_FLAGS(vnc->view, GTK_CAN_FOCUS); /* packing */ @@ -686,6 +703,7 @@ GtkWidget *vnc_open(char *hostname, int tcpport, unsigned long flags, gtk_misc_set_padding(GTK_MISC(vnc->res), 3, 1); gtk_box_pack_start(GTK_BOX(hbox), vnc->kbd, FALSE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(hbox), vnc->ptr, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox), vnc->view, FALSE, TRUE, 0); /* show window */ |