[gtk-vnc-devel] [PATCH 5/7] Use X window backing store for the VNC window 2008-11-24 Federico Mena Quintero <federico novell com>
- From: Federico Mena Quintero <federico novell com>
- To: gtk-vnc-devel lists sourceforge net
- Subject: [gtk-vnc-devel] [PATCH 5/7] Use X window backing store for the VNC window 2008-11-24 Federico Mena Quintero <federico novell com>
- Date: Wed, 17 Dec 2008 23:56:56 -0000
* src/vncdisplay.c (add_backing_store): New function; adds a
backing_store of Always to our window.
(realize): Add backing store (on the X-server side) to our window,
so that it sends us as few expose events as possible. Trick
stolen from TightVNC.
Signed-off-by: Federico Mena Quintero <federico novell com>
---
ChangeLog | 8 ++++++++
src/vncdisplay.c | 26 ++++++++++++++++++++++++++
2 files changed, 34 insertions(+), 0 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index a8cf656..a3d056b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2008-11-24 Federico Mena Quintero <federico novell com>
+
+ * src/vncdisplay.c (add_backing_store): New function; adds a
+ backing_store of Always to our window.
+ (realize): Add backing store (on the X-server side) to our window,
+ so that it sends us as few expose events as possible. Trick
+ stolen from TightVNC.
+
2008-11-20 Federico Mena Quintero <federico novell com>
Do compression of motion events, like TightVNC does, so that the
diff --git a/src/vncdisplay.c b/src/vncdisplay.c
index fdec881..e9ba14e 100644
--- a/src/vncdisplay.c
+++ b/src/vncdisplay.c
@@ -298,6 +298,25 @@ eat_pending_motion_events_filter_func (GdkXEvent *xevent,
}
static void
+add_backing_store(VncDisplay *obj)
+{
+ GdkWindow *window;
+ Display *xdisplay;
+ Window xwindow;
+ XSetWindowAttributes attr;
+ gulong value_mask;
+
+ window = gtk_widget_get_window (GTK_WIDGET (obj));
+ xdisplay = gdk_x11_drawable_get_xdisplay (window);
+ xwindow = GDK_WINDOW_XWINDOW (window);
+
+ attr.backing_store = Always;
+ value_mask = CWBackingStore;
+
+ XChangeWindowAttributes (xdisplay, xwindow, value_mask, &attr);
+}
+
+static void
realize (GtkWidget *widget)
{
VncDisplay *obj = VNC_DISPLAY(widget);
@@ -311,6 +330,13 @@ realize (GtkWidget *widget)
* motion events.
*/
gdk_window_add_filter (widget->window, eat_pending_motion_events_filter_func, widget);
+
+ /* TightVNC requests an X window backing_store of "Always". We'll do
+ * the same, as this lets VNC viewers displayed on a remote X server
+ * (a common scenario, it seems) to minimize the number of expose events that
+ * get received.
+ */
+ add_backing_store (obj);
}
static gboolean expose_event(GtkWidget *widget, GdkEventExpose *expose)
--
1.5.6
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]