aboutsummaryrefslogtreecommitdiff
path: root/src/testcard.c
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2017-12-04 22:22:22 +0100
committerThomas White <taw@physics.org>2017-12-04 22:23:29 +0100
commita05910a73a7bb3756e6dd579caf0d44c9b8b8284 (patch)
treef69d4b221dc8305dc4f93bee08c9dff94de60680 /src/testcard.c
parent43e38c6b62834fb6e05b153d96abaf8329e58e28 (diff)
Use newer API for full screen presentation
Diffstat (limited to 'src/testcard.c')
-rw-r--r--src/testcard.c53
1 files changed, 26 insertions, 27 deletions
diff --git a/src/testcard.c b/src/testcard.c
index f2c1d70..4ddb611 100644
--- a/src/testcard.c
+++ b/src/testcard.c
@@ -214,17 +214,22 @@ static gboolean draw_sig(GtkWidget *da, cairo_t *cr, struct testcard *tc)
}
-static gboolean key_press_sig(GtkWidget *da, GdkEventKey *event,
- struct testcard *tc)
+static void size_sig(GtkWidget *widget, GdkRectangle *rect, struct testcard *ss)
{
- if ( !event->is_modifier ) gtk_widget_destroy(tc->window);
- return FALSE;
+ int w;
+
+ w = rect->height * ss->p->slide_width/ss->p->slide_height;
+ if ( w > rect->width ) w = rect->width;
+ ss->slide_width = w;
+ ss->slide_height = rect->height;
}
-static gboolean realize_sig(GtkWidget *w, struct testcard *tc)
+
+static gboolean key_press_sig(GtkWidget *da, GdkEventKey *event,
+ struct testcard *tc)
{
- gtk_window_parse_geometry(GTK_WINDOW(w), tc->geom);
+ if ( !event->is_modifier ) gtk_widget_destroy(tc->window);
return FALSE;
}
@@ -233,10 +238,7 @@ void show_testcard(struct presentation *p)
{
GdkDisplay *display;
int n_monitors;
- int i;
struct testcard *tc;
- double slide_width = 1024.0; /* Logical slide size */
- double slide_height = 768.0; /* FIXME: Should come from slide */
tc = calloc(1, sizeof(struct testcard));
if ( tc == NULL ) return;
@@ -259,8 +261,8 @@ void show_testcard(struct presentation *p)
G_CALLBACK(key_press_sig), tc);
g_signal_connect(G_OBJECT(tc->window), "destroy",
G_CALLBACK(destroy_sig), tc);
- g_signal_connect(G_OBJECT(tc->window), "realize",
- G_CALLBACK(realize_sig), tc);
+ g_signal_connect(G_OBJECT(tc->window), "size-allocate",
+ G_CALLBACK(size_sig), tc);
g_signal_connect(G_OBJECT(tc->drawingarea), "draw",
G_CALLBACK(draw_sig), tc);
@@ -268,25 +270,22 @@ void show_testcard(struct presentation *p)
display = gdk_display_get_default();
n_monitors = gdk_display_get_n_monitors(display);
- for ( i=0; i<n_monitors; i++ ) {
-
- GdkMonitor *monitor;
- GdkRectangle rect;
- int w;
-
- monitor = gdk_display_get_monitor(display, i);
- gdk_monitor_get_geometry(monitor,&rect);
- snprintf(tc->geom, 255, "%ix%i+%i+%i",
- rect.width, rect.height, rect.x, rect.y);
- w = rect.height * slide_width/slide_height;
- if ( w > rect.width ) w = rect.width;
- tc->slide_width = w;
- tc->slide_height = rect.height;
-
- } /* FIXME: Sensible (configurable) choice of monitor */
+ GdkMonitor *mon_ss;
+ if ( n_monitors == 1 ) {
+ mon_ss = gdk_display_get_primary_monitor(display);
+ printf("Single monitor mode\n");
+ } else {
+ mon_ss = gdk_display_get_monitor(display, 1);
+ printf("Dual monitor mode\n");
+ }
+ /* Workaround because gtk_window_fullscreen_on_monitor doesn't work */
+ GdkRectangle rect;
+ gdk_monitor_get_geometry(mon_ss, &rect);
+ gtk_window_move(GTK_WINDOW(tc->window), rect.x, rect.y);
gtk_window_fullscreen(GTK_WINDOW(tc->window));
+
gtk_widget_show_all(GTK_WIDGET(tc->window));
if ( tc->inhibit != NULL ) do_inhibit(tc->inhibit, 1);