Re: [gtk-vnc-devel] PATCH: configurable pointer hiding



Daniel P. Berrange wrote:
Following on from the previous patch, this patch makes the local pointer
hiding configurable. By default no local pointer is shown when the mouse
is over the VNC widget. If using the vnc_display_set_pointer_local method
the app can turn on the visibility of a local pointer.

Works for me.  Thanks!

Regards,

Anthony Liguori

Dan.
------------------------------------------------------------------------

changeset:   26:06fb3b1e2320
user:        "Daniel P. Berrange <berrange redhat com>"
date:        Fri Jul 06 11:40:33 2007 -0400
summary:     Allow local pointer hiding to be configurable

diff -r f0724efc82b7 -r 06fb3b1e2320 examples/gvncviewer.c
--- a/examples/gvncviewer.c	Fri Jul 06 10:57:07 2007 -0400
+++ b/examples/gvncviewer.c	Fri Jul 06 11:40:33 2007 -0400
@@ -123,6 +123,7 @@ int main(int argc, char **argv)
vnc_display_set_keyboard_grab(VNC_DISPLAY(vnc), TRUE);
 	vnc_display_set_pointer_grab(VNC_DISPLAY(vnc), TRUE);
+	//vnc_display_set_pointer_local(VNC_DISPLAY(vnc), TRUE);
 	vnc_display_open_name(VNC_DISPLAY(vnc), argv[1], argv[2]);
gtk_signal_connect(GTK_OBJECT(window), "delete-event",
diff -r f0724efc82b7 -r 06fb3b1e2320 examples/gvncviewer.py
--- a/examples/gvncviewer.py	Fri Jul 06 10:57:07 2007 -0400
+++ b/examples/gvncviewer.py	Fri Jul 06 11:40:33 2007 -0400
@@ -69,6 +69,7 @@ v.realize()
 v.realize()
 v.set_pointer_grab(True)
 v.set_keyboard_grab(True)
+#v.set_pointer_local(True)
if len(sys.argv) == 4:
     v.set_credential(gtkvnc.CREDENTIAL_PASSWORD, sys.argv[3])
diff -r f0724efc82b7 -r 06fb3b1e2320 src/libgtk-vnc_sym.version
--- a/src/libgtk-vnc_sym.version	Fri Jul 06 10:57:07 2007 -0400
+++ b/src/libgtk-vnc_sym.version	Fri Jul 06 11:40:33 2007 -0400
@@ -15,6 +15,7 @@
     vnc_display_get_pixbuf;
vnc_display_set_use_shm;
+    vnc_display_set_pointer_local;
     vnc_display_set_pointer_grab;
     vnc_display_set_keyboard_grab;
diff -r f0724efc82b7 -r 06fb3b1e2320 src/vncdisplay.c
--- a/src/vncdisplay.c	Fri Jul 06 10:57:07 2007 -0400
+++ b/src/vncdisplay.c	Fri Jul 06 11:40:33 2007 -0400
@@ -48,6 +48,7 @@ struct _VncDisplayPrivate
 	gboolean use_shm;
 	gboolean grab_pointer;
 	gboolean grab_keyboard;
+	gboolean local_pointer;
 };
/* Signals */
@@ -171,6 +172,18 @@ static void do_pointer_ungrab(VncDisplay
 	g_signal_emit(obj, signals[VNC_POINTER_UNGRAB], 0);
 }
+static void do_pointer_hide(VncDisplay *obj)
+{
+	VncDisplayPrivate *priv = obj->priv;
+	gdk_window_set_cursor(GTK_WIDGET(obj)->window,
+			      priv->null_cursor);
+}
+
+static void do_pointer_show(VncDisplay *obj)
+{
+	gdk_window_set_cursor(GTK_WIDGET(obj)->window,
+			      NULL);
+}
static gboolean button_event(GtkWidget *widget, GdkEventButton *button, @@ -376,8 +389,10 @@ static gboolean on_resize(void *opaque, if (priv->gc == NULL) {
 		priv->null_cursor = create_null_cursor();
-		gdk_window_set_cursor(GTK_WIDGET(obj)->window,
-				      priv->null_cursor);
+		if (priv->local_pointer)
+			do_pointer_show(obj);
+		else
+			do_pointer_hide(obj);
 		priv->gc = gdk_gc_new(GTK_WIDGET(obj)->window);
 	}
@@ -416,12 +431,8 @@ static gboolean on_pointer_type_change(v
 	VncDisplay *obj = VNC_DISPLAY(opaque);
 	VncDisplayPrivate *priv = obj->priv;
- if (absolute) {
-		if (priv->in_pointer_grab && !priv->grab_pointer)
-			do_pointer_ungrab(obj);
-		gdk_window_set_cursor(GTK_WIDGET(obj)->window, priv->null_cursor);
-	} else
-		gdk_window_set_cursor(GTK_WIDGET(obj)->window, NULL);
+	if (absolute && priv->in_pointer_grab && !priv->grab_pointer)
+		do_pointer_ungrab(obj);
priv->absolute = absolute;
 	return TRUE;
@@ -800,6 +811,17 @@ void vnc_display_set_use_shm(VncDisplay obj->priv->use_shm = enable;
 }
+void vnc_display_set_pointer_local(VncDisplay *obj, gboolean enable)
+{
+	if (obj->priv->gc) {
+		if (enable)
+			do_pointer_show(obj);
+		else
+			do_pointer_hide(obj);
+	}
+	obj->priv->local_pointer = enable;
+}
+
 void vnc_display_set_pointer_grab(VncDisplay *obj, gboolean enable)
 {
 	VncDisplayPrivate *priv = obj->priv;
diff -r f0724efc82b7 -r 06fb3b1e2320 src/vncdisplay.h
--- a/src/vncdisplay.h	Fri Jul 06 10:57:07 2007 -0400
+++ b/src/vncdisplay.h	Fri Jul 06 11:40:33 2007 -0400
@@ -75,6 +75,7 @@ gboolean	vnc_display_set_credential(VncD
 gboolean	vnc_display_set_credential(VncDisplay *obj, int type, const gchar *data);
void vnc_display_set_use_shm(VncDisplay *obj, gboolean enable);
+void		vnc_display_set_pointer_local(VncDisplay *obj, gboolean enable);
 void		vnc_display_set_pointer_grab(VncDisplay *obj, gboolean enable);
 void		vnc_display_set_keyboard_grab(VncDisplay *obj, gboolean enable);
------------------------------------------------------------------------

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
------------------------------------------------------------------------

_______________________________________________
Gtk-vnc-devel mailing list
Gtk-vnc-devel lists sourceforge net
https://lists.sourceforge.net/lists/listinfo/gtk-vnc-devel





[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]