diff --git a/src/plugins/renderers/x11/plugin.c b/src/plugins/renderers/x11/plugin.c index 9d66a63e..54980ee5 100644 --- a/src/plugins/renderers/x11/plugin.c +++ b/src/plugins/renderers/x11/plugin.c @@ -68,6 +68,7 @@ struct _ply_renderer_head GtkWidget *window; GdkPixmap *pixmap; cairo_surface_t *image; + uint32_t is_fullscreen : 1; }; struct _ply_renderer_input_source @@ -172,43 +173,78 @@ close_device (ply_renderer_backend_t *backend) return; } +static void +create_fake_multi_head_setup (ply_renderer_backend_t *backend) +{ + ply_renderer_head_t *head; + + head = calloc (1, sizeof (ply_renderer_head_t)); + + head->backend = backend; + head->area.x = 0; + head->area.y = 0; + head->area.width = 800; /* FIXME hardcoded */ + head->area.height = 600; + head->pixmap = gdk_pixmap_new (NULL, + head->area.width, + head->area.height, + 24); + head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height); + + ply_list_append_data (backend->heads, head); + + head = calloc (1, sizeof (ply_renderer_head_t)); + + head->backend = backend; + head->area.x = 800; + head->area.y = 0; + head->area.width = 640; /* FIXME hardcoded */ + head->area.height = 480; + head->pixmap = gdk_pixmap_new (NULL, + head->area.width, + head->area.height, + 24); + head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height); + + ply_list_append_data (backend->heads, head); +} + +static void +create_fullscreen_single_head_setup (ply_renderer_backend_t *backend) +{ + ply_renderer_head_t *head; + GdkRectangle monitor_geometry; + + gdk_screen_get_monitor_geometry (gdk_screen_get_default (), 0, &monitor_geometry); + + head = calloc (1, sizeof (ply_renderer_head_t)); + + head->backend = backend; + head->area.x = monitor_geometry.x; + head->area.y = monitor_geometry.y; + head->area.width = monitor_geometry.width; + head->area.height = monitor_geometry.height; + head->is_fullscreen = true; + head->pixmap = gdk_pixmap_new (NULL, + head->area.width, + head->area.height, + 24); + head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height); + + ply_list_append_data (backend->heads, head); +} + static bool query_device (ply_renderer_backend_t *backend) { - ply_renderer_head_t *head; assert (backend != NULL); if (ply_list_get_first_node (backend->heads) == NULL) { - head = calloc (1, sizeof (ply_renderer_head_t)); - - head->backend = backend; - head->area.x = 0; - head->area.y = 0; - head->area.width = 800; /* FIXME hardcoded */ - head->area.height = 600; - head->pixmap = gdk_pixmap_new (NULL, - head->area.width, - head->area.height, - 24); - head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height); - - ply_list_append_data (backend->heads, head); - - head = calloc (1, sizeof (ply_renderer_head_t)); - - head->backend = backend; - head->area.x = 800; - head->area.y = 0; - head->area.width = 640; /* FIXME hardcoded */ - head->area.height = 480; - head->pixmap = gdk_pixmap_new (NULL, - head->area.width, - head->area.height, - 24); - head->pixel_buffer = ply_pixel_buffer_new (head->area.width, head->area.height); - - ply_list_append_data (backend->heads, head); + if (getenv ("PLY_CREATE_FAKE_MULTI_HEAD_SETUP") != NULL) + create_fake_multi_head_setup (backend); + else + create_fullscreen_single_head_setup (backend); } return true; @@ -256,6 +292,11 @@ map_to_device (ply_renderer_backend_t *backend) gdk_window_set_decorations (head->window->window, GDK_DECOR_BORDER); gtk_window_move (GTK_WINDOW (head->window), head->area.x, head->area.y); + gtk_window_set_type_hint (GTK_WINDOW (head->window), GDK_WINDOW_TYPE_HINT_DOCK); + + if (head->is_fullscreen) + gtk_window_fullscreen (GTK_WINDOW (head->window)); + gtk_widget_add_events (head->window, GDK_BUTTON1_MOTION_MASK); g_signal_connect (head->window, "motion-notify-event",