-#include <glib.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int fd;
gzFile *zfd;
int error;
+ guint32 serial;
};
static void
}
BroadwayOutput *
-broadway_output_new(int fd)
+broadway_output_new(int fd, guint32 serial)
{
BroadwayOutput *output;
output = g_new0 (BroadwayOutput, 1);
output->fd = fd;
+ output->serial = serial;
broadway_output_write_header (output);
free (output);
}
+guint32
+broadway_output_get_next_serial (BroadwayOutput *output)
+{
+ return output->serial;
+}
+
int
broadway_output_flush (BroadwayOutput *output)
{
* Core rendering operations *
************************************************************************/
-#define HEADER_LEN 1
+#define HEADER_LEN (1+6)
static void
append_uint16 (guint32 v, char *buf, int *p)
p = 0;
buf[p++] = op;
+ append_uint32 (output->serial++, buf, &p);
return p;
}
len = strlen (url);
append_uint32 (len, buf, &p);
- broadway_output_write (output, buf, 16);
+ assert (p == sizeof (buf));
+
+ broadway_output_write (output, buf, sizeof (buf));
broadway_output_write (output, url, len);
broadway_display = GDK_BROADWAY_DISPLAY (display);
broadway_display->event_source = _gdk_broadway_event_source_new (display);
+ broadway_display->saved_serial = 1;
}
static void
fd = g_socket_get_fd (socket);
set_fd_blocking (fd);
/* We dup this because otherwise it'll be closed with the request SocketConnection */
- broadway_display->output = broadway_output_new (dup(fd));
+
+ if (broadway_display->output)
+ {
+ broadway_display->saved_serial = broadway_output_get_next_serial (broadway_display->output);
+ broadway_output_free (broadway_display->output);
+ }
+
+ broadway_display->output = broadway_output_new (dup(fd), broadway_display->saved_serial);
_gdk_broadway_resync_windows ();
http_request_free (request);
}
static gulong
gdk_broadway_display_get_next_serial (GdkDisplay *display)
{
- return 0;
+ GdkBroadwayDisplay *broadway_display;
+ broadway_display = GDK_BROADWAY_DISPLAY (display);
+ if (broadway_display->output)
+ return broadway_output_get_next_serial (broadway_display->output);
+ return broadway_display->saved_serial;
}
GdkWindow *root, *window;
char *p;
int x, y, button, id, dir,key;
+ guint32 serial;
guint64 time;
GdkEvent *event = NULL;
char cmd;
p = (char *)message;
cmd = *p++;
+ serial = (guint32)strtol(p, &p, 10);
+ p++; /* Skip , */
switch (cmd) {
case 'm':
id = strtol(p, &p, 10);
gdk_event_set_device (event, display->core_pointer);
node = _gdk_event_queue_append (display, event);
- _gdk_windowing_got_event (display, node, event, 0);
+ _gdk_windowing_got_event (display, node, event, serial);
event = gdk_event_new (GDK_FOCUS_CHANGE);
event->focus_change.window = g_object_ref (display_broadway->mouse_in_toplevel);
gdk_event_set_device (event, display->core_pointer);
node = _gdk_event_queue_append (display, event);
- _gdk_windowing_got_event (display, node, event, 0);
+ _gdk_windowing_got_event (display, node, event, serial);
}
/* TODO: Unset when it dies */
gdk_event_set_device (event, display->core_pointer);
node = _gdk_event_queue_append (display, event);
- _gdk_windowing_got_event (display, node, event, 0);
+ _gdk_windowing_got_event (display, node, event, serial);
event = gdk_event_new (GDK_FOCUS_CHANGE);
event->focus_change.window = g_object_ref (window);
gdk_event_set_device (event, display->core_pointer);
node = _gdk_event_queue_append (display, event);
- _gdk_windowing_got_event (display, node, event, 0);
+ _gdk_windowing_got_event (display, node, event, serial);
}
}
gdk_event_set_device (event, display->core_pointer);
node = _gdk_event_queue_append (display, event);
- _gdk_windowing_got_event (display, node, event, 0);
+ _gdk_windowing_got_event (display, node, event, serial);
}
break;
gdk_event_set_device (event, display->core_pointer);
node = _gdk_event_queue_append (display, event);
- _gdk_windowing_got_event (display, node, event, 0);
+ _gdk_windowing_got_event (display, node, event, serial);
}
break;
gdk_event_set_device (event, display->core_pointer);
node = _gdk_event_queue_append (display, event);
- _gdk_windowing_got_event (display, node, event, 0);
+ _gdk_windowing_got_event (display, node, event, serial);
}
break;
gdk_event_set_device (event, display->core_pointer);
node = _gdk_event_queue_append (display, event);
- _gdk_windowing_got_event (display, node, event, 0);
+ _gdk_windowing_got_event (display, node, event, serial);
}
break;