From 693a3af7be9173ea67c911ed99ff0570762c6641 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 1 May 2019 15:29:52 +0200 Subject: Set title bar of slide window properly --- src/narrative_window.c | 39 +++++++++++++++++---------------------- src/narrative_window.h | 6 ++++++ src/slide_window.c | 26 +++++++++++++++++++++++--- src/slide_window.h | 5 +++++ 4 files changed, 51 insertions(+), 25 deletions(-) diff --git a/src/narrative_window.c b/src/narrative_window.c index 1a7d11d..b8792c0 100644 --- a/src/narrative_window.c +++ b/src/narrative_window.c @@ -81,41 +81,36 @@ static void show_error(NarrativeWindow *nw, const char *err) } -static char *get_titlebar_string(NarrativeWindow *nw) +char *narrative_window_get_filename(NarrativeWindow *nw) { + char *filename; if ( nw == NULL || nw->file == NULL ) { - return strdup(_("(untitled)")); + filename = strdup(_("(untitled)")); } else { - char *bn = g_file_get_basename(nw->file); - return bn; + filename = g_file_get_basename(nw->file); } + return filename; } - static void update_titlebar(NarrativeWindow *nw) { - char *title; - char *title_new; + char title[1026]; + char *filename; + int i; - title = get_titlebar_string(nw); - title_new = realloc(title, strlen(title)+16); - if ( title_new == NULL ) { - free(title); - return; - } else { - title = title_new; - } + filename = narrative_window_get_filename(nw); + snprintf(title, 1024, "%s - Colloquium", filename); + if ( narrative_get_unsaved(nw->n) ) strcat(title, " *"); + free(filename); - strcat(title, " - Colloquium"); - if ( narrative_get_unsaved(nw->n) ) { - strcat(title, " *"); - } gtk_window_set_title(GTK_WINDOW(nw->window), title); - /* FIXME: Update all slide windows belonging to this NW */ + for ( i=0; in_slidewindows; i++ ) { + slide_window_update_titlebar(nw->slidewindows[i]); + } +} - free(title); } @@ -503,7 +498,7 @@ static gboolean nw_double_click_sig(GtkWidget *da, gpointer *pslide, if ( nw->show == NULL ) { if ( nw->n_slidewindows < 16 ) { nw->slidewindows[nw->n_slidewindows++] = slide_window_open(nw->n, slide, - nw->app); + nw, nw->app); } } else { sc_slideshow_set_slide(nw->show, slide); diff --git a/src/narrative_window.h b/src/narrative_window.h index 5a7646d..1df4c7f 100644 --- a/src/narrative_window.h +++ b/src/narrative_window.h @@ -29,7 +29,13 @@ typedef struct _narrative_window NarrativeWindow; +#include "slide_window.h" + extern NarrativeWindow *narrative_window_new(Narrative *n, GFile *file, GApplication *papp); +extern void narrative_window_sw_closed(NarrativeWindow *nw, SlideWindow *sw); + +extern char *narrative_window_get_filename(NarrativeWindow *nw); + #endif /* NARRATIVE_WINDOW_H */ diff --git a/src/slide_window.c b/src/slide_window.c index 879501a..ca84b90 100644 --- a/src/slide_window.c +++ b/src/slide_window.c @@ -1,7 +1,7 @@ /* * slide_window.c * - * Copyright © 2013-2018 Thomas White + * Copyright © 2013-2019 Thomas White * * This file is part of Colloquium. * @@ -39,6 +39,7 @@ #include "colloquium.h" #include "slide_window.h" +#include "narrative_window.h" struct _slidewindow @@ -47,6 +48,7 @@ struct _slidewindow Narrative *n; Slide *slide; GtkWidget *sv; + NarrativeWindow *parent; }; @@ -90,6 +92,7 @@ static void change_edit_slide(SlideWindow *sw, Slide *np) { gtk_slide_view_set_slide(sw->sv, np); sw->slide = np; + slide_window_update_titlebar(sw); } @@ -205,8 +208,8 @@ GActionEntry sw_entries[] = { }; -extern SlideWindow *slide_window_open(Narrative *n, Slide *slide, - GApplication *papp) +SlideWindow *slide_window_open(Narrative *n, Slide *slide, + NarrativeWindow *nw, GApplication *papp) { GtkWidget *window; SlideWindow *sw; @@ -221,6 +224,9 @@ extern SlideWindow *slide_window_open(Narrative *n, Slide *slide, sw->window = window; sw->n = n; sw->slide = slide; + sw->parent = nw; + + slide_window_update_titlebar(sw); g_action_map_add_action_entries(G_ACTION_MAP(window), sw_entries, G_N_ELEMENTS(sw_entries), sw); @@ -253,3 +259,17 @@ void slide_window_update(SlideWindow *sw) h = gtk_widget_get_allocated_height(GTK_WIDGET(sw->sv)); gtk_widget_queue_draw_area(GTK_WIDGET(sw->sv), 0, 0, w, h); } + + +void slide_window_update_titlebar(SlideWindow *sw) +{ + char title[1026]; + char *filename; + + filename = narrative_window_get_filename(sw->parent); + snprintf(title, 1024, "%s (slide %i) - Colloquium", filename, + 1+narrative_get_slide_number_for_slide(sw->n, sw->slide)); + if ( narrative_get_unsaved(sw->n) ) strcat(title, " *"); + + gtk_window_set_title(GTK_WINDOW(sw->window), title); +} diff --git a/src/slide_window.h b/src/slide_window.h index c67d05b..f7394fa 100644 --- a/src/slide_window.h +++ b/src/slide_window.h @@ -29,9 +29,14 @@ typedef struct _slidewindow SlideWindow; +#include "narrative_window.h" + extern SlideWindow *slide_window_open(Narrative *n, Slide *slide, + NarrativeWindow *parent, GApplication *papp); extern void slide_window_update(SlideWindow *sw); +extern void slide_window_update_titlebar(SlideWindow *sw); + #endif /* SLIDEWINDOW_H */ -- cgit v1.2.3