[gtk+] Broadway: Remove display assumptions
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Broadway: Remove display assumptions
- Date: Sat, 25 Oct 2014 14:33:17 +0000 (UTC)
commit f733fa88f585693a12137210c02aa93451b293c9
Author: Matthias Clasen <mclasen redhat com>
Date: Sat Oct 25 10:31:31 2014 -0400
Broadway: Remove display assumptions
In various places, the broadway backend was just using
the default display and assumed that it is the broadway
display. That may not be the case in a multi-backend world,
so instead iterate over all displays and use the first
broadway display - still not perfect, but enough to survive
for now.
gdk/broadway/gdkdevice-broadway.c | 2 +-
gdk/broadway/gdkeventsource.c | 21 +++++++++++++++++++--
gdk/broadway/gdkwindow-broadway.c | 29 +++++++++++++++++++++++++++--
3 files changed, 47 insertions(+), 5 deletions(-)
---
diff --git a/gdk/broadway/gdkdevice-broadway.c b/gdk/broadway/gdkdevice-broadway.c
index 3c89479..cfd9f96 100644
--- a/gdk/broadway/gdkdevice-broadway.c
+++ b/gdk/broadway/gdkdevice-broadway.c
@@ -344,7 +344,7 @@ gdk_broadway_device_window_at_position (GdkDevice *device,
GdkWindow *root_window;
GdkWindow *window;
- screen = gdk_screen_get_default ();
+ screen = gdk_display_get_default_screen (gdk_device_get_display (device));
root_window = gdk_screen_get_root_window (screen);
gdk_broadway_device_query_state (device, root_window, NULL, &window, NULL, NULL, win_x, win_y, mask);
diff --git a/gdk/broadway/gdkeventsource.c b/gdk/broadway/gdkeventsource.c
index 08dd073..d878521 100644
--- a/gdk/broadway/gdkeventsource.c
+++ b/gdk/broadway/gdkeventsource.c
@@ -92,14 +92,31 @@ gdk_event_source_check (GSource *source)
void
_gdk_broadway_events_got_input (BroadwayInputMsg *message)
{
- GdkDisplay *display = gdk_display_get_default ();
- GdkBroadwayDisplay *display_broadway = GDK_BROADWAY_DISPLAY (display);
+ GdkDisplay *display;
+ GdkBroadwayDisplay *display_broadway;
GdkBroadwayDeviceManager *device_manager;
GdkScreen *screen;
GdkWindow *window;
GdkEvent *event = NULL;
GList *node;
+ GSList *list, *d;
+
+ display = NULL;
+
+ list = gdk_display_manager_list_displays (gdk_display_manager_get ());
+ for (d = list; d; d = d->next)
+ {
+ if (GDK_IS_BROADWAY_DISPLAY (d->data))
+ {
+ display = d->data;
+ break;
+ }
+ }
+ g_slist_free (list);
+
+ g_assert (display != NULL);
+ display_broadway = GDK_BROADWAY_DISPLAY (display);
device_manager = GDK_BROADWAY_DEVICE_MANAGER (gdk_display_get_device_manager (display));
switch (message->base.type) {
diff --git a/gdk/broadway/gdkwindow-broadway.c b/gdk/broadway/gdkwindow-broadway.c
index 24db20c..e0bded1 100644
--- a/gdk/broadway/gdkwindow-broadway.c
+++ b/gdk/broadway/gdkwindow-broadway.c
@@ -28,6 +28,8 @@
#include "gdkwindow-broadway.h"
#include "gdkscreen-broadway.h"
+#include "gdkbroadwaydisplay.h"
+#include "gdkdisplay.h"
#include "gdkwindow.h"
#include "gdkwindowimpl.h"
#include "gdkdisplay-broadway.h"
@@ -81,6 +83,28 @@ G_DEFINE_TYPE (GdkWindowImplBroadway,
gdk_window_impl_broadway,
GDK_TYPE_WINDOW_IMPL)
+static GdkDisplay *
+find_broadway_display (void)
+{
+ GdkDisplay *display;
+ GSList *list, *l;
+
+ display = NULL;
+
+ list = gdk_display_manager_list_displays (gdk_display_manager_get ());
+ for (l = list; l; l = l->next)
+ {
+ if (GDK_IS_BROADWAY_DISPLAY (l->data))
+ {
+ display = l->data;
+ break;
+ }
+ }
+ g_slist_free (list);
+
+ return display;
+}
+
static void
update_dirty_windows_and_sync (void)
{
@@ -88,7 +112,8 @@ update_dirty_windows_and_sync (void)
GdkBroadwayDisplay *display;
gboolean updated_surface;
- display = GDK_BROADWAY_DISPLAY (gdk_display_get_default ());
+ display = GDK_BROADWAY_DISPLAY (find_broadway_display ());
+ g_assert (display != NULL);
updated_surface = FALSE;
for (l = display->toplevels; l != NULL; l = l->next)
@@ -120,7 +145,7 @@ flush_idle (gpointer data)
{
flush_id = 0;
- gdk_display_flush (gdk_display_get_default ());
+ gdk_display_flush (find_broadway_display ());
return FALSE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]