aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--vnc.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/vnc.c b/vnc.c
index 55d6221..ef15f04 100644
--- a/vnc.c
+++ b/vnc.c
@@ -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 */