aboutsummaryrefslogtreecommitdiff
path: root/src/starlet-fixture-display.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/starlet-fixture-display.c')
-rw-r--r--src/starlet-fixture-display.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/starlet-fixture-display.c b/src/starlet-fixture-display.c
index 4ac3e84..d04afa7 100644
--- a/src/starlet-fixture-display.c
+++ b/src/starlet-fixture-display.c
@@ -53,6 +53,7 @@ struct fixture_display
int n_fixtures;
GtkWidget *da;
ReplConnection *repl;
+ int shutdown;
};
@@ -176,6 +177,13 @@ static void redraw(struct fixture_display *fixd)
}
+static void shutdown_sig(GtkWidget *window, struct fixture_display *fixd)
+{
+ repl_connection_close(fixd->repl);
+ fixd->shutdown = TRUE;
+}
+
+
static gboolean key_press_sig(GtkWidget *da, GdkEventKey *event, struct fixture_display *fixd)
{
int claim = 1;
@@ -215,8 +223,19 @@ static gint realise_sig(GtkWidget *da, struct fixture_display *fixd)
static gboolean redraw_cb(gpointer data)
{
- redraw((struct fixture_display *)data);
- return G_SOURCE_CONTINUE;
+ struct fixture_display *fixd = data;
+ if ( !fixd->shutdown ) {
+ redraw(fixd);
+ return G_SOURCE_CONTINUE;
+ } else {
+ if ( repl_closed(fixd->repl) ) {
+ gtk_main_quit();
+ return G_SOURCE_REMOVE;
+ } else {
+ return G_SOURCE_CONTINUE;
+ }
+ }
+
}
@@ -346,8 +365,8 @@ int main(int argc, char *argv[])
/* Create main window */
mainwindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(mainwindow), 1024, 768);
- g_signal_connect_swapped(G_OBJECT(mainwindow), "destroy",
- gtk_main_quit, NULL);
+ g_signal_connect(G_OBJECT(mainwindow), "destroy",
+ G_CALLBACK(shutdown_sig), &fixd);
gtk_window_set_title(GTK_WINDOW(mainwindow), "Starlet fixture display");
da = gtk_drawing_area_new();
@@ -356,6 +375,7 @@ int main(int argc, char *argv[])
fixd.fixtures = NULL;
fixd.n_fixtures = 0;
fixd.da = da;
+ fixd.shutdown = FALSE;
gtk_container_add(GTK_CONTAINER(mainwindow), GTK_WIDGET(da));
gtk_widget_set_can_focus(GTK_WIDGET(da), TRUE);