diff options
Diffstat (limited to 'src/slide_window.c')
-rw-r--r-- | src/slide_window.c | 80 |
1 files changed, 39 insertions, 41 deletions
diff --git a/src/slide_window.c b/src/slide_window.c index c4aa948..7904f6e 100644 --- a/src/slide_window.c +++ b/src/slide_window.c @@ -45,15 +45,7 @@ #include "narrative_window.h" -struct _slidewindow -{ - GtkWidget *window; - Narrative *n; - Slide *slide; - GtkWidget *sv; - NarrativeWindow *parent; -}; - +G_DEFINE_TYPE_WITH_CODE(SlideWindow, gtk_slide_window, GTK_TYPE_APPLICATION_WINDOW, NULL) static void insert_slidetitle_sig(GSimpleAction *action, GVariant *parameter, gpointer vp) @@ -278,13 +270,6 @@ static void last_slide_sig(GSimpleAction *action, GVariant *parameter, } -static gboolean sw_close_sig(GtkWidget *w, SlideWindow *sw) -{ - narrative_window_sw_closed(sw->parent, sw); - return FALSE; -} - - static gboolean sw_key_press_sig(GtkWidget *da, GdkEventKey *event, SlideWindow *sw) { @@ -307,13 +292,20 @@ static gboolean sw_key_press_sig(GtkWidget *da, GdkEventKey *event, static void sw_about_sig(GSimpleAction *action, GVariant *parameter, gpointer vp) { SlideWindow *sw = vp; - open_about_dialog(sw->window); + open_about_dialog(GTK_WIDGET(sw)); +} + +static void sw_save_sig(GSimpleAction *action, GVariant *parameter, gpointer vp) +{ + SlideWindow *sw = vp; + g_action_group_activate_action(G_ACTION_GROUP(sw->parent), "save", parameter); } GActionEntry sw_entries[] = { { "about", sw_about_sig, NULL, NULL, NULL }, + { "save", sw_save_sig, NULL, NULL, NULL }, { "paste", paste_sig, NULL, NULL, NULL }, { "copyframe", copy_frame_sig, NULL, NULL, NULL }, { "deleteframe", delete_frame_sig, NULL, NULL, NULL }, @@ -327,45 +319,57 @@ GActionEntry sw_entries[] = { }; -SlideWindow *slide_window_open(Narrative *n, Slide *slide, - NarrativeWindow *nw, GApplication *papp) +static void sw_emit_change_sig(GtkWidget *sv, SlideWindow *sw) +{ + g_signal_emit_by_name(sw, "changed"); +} + + +static void gtk_slide_window_class_init(SlideWindowClass *klass) +{ + g_signal_new("changed", GTK_TYPE_SLIDE_WINDOW, G_SIGNAL_RUN_LAST, 0, + NULL, NULL, NULL, G_TYPE_NONE, 0); +} + + +static void gtk_slide_window_init(SlideWindow *sw) +{ +} + + +SlideWindow *slide_window_new(Narrative *n, Slide *slide, + NarrativeWindow *nw, GApplication *papp) { - GtkWidget *window; SlideWindow *sw; double w, h; Colloquium *app = COLLOQUIUM(papp); - sw = calloc(1, sizeof(SlideWindow)); - if ( sw == NULL ) return NULL; + sw = g_object_new(GTK_TYPE_SLIDE_WINDOW, "application", app, NULL); + gtk_window_set_role(GTK_WINDOW(sw), "slide"); - window = gtk_application_window_new(GTK_APPLICATION(app)); - gtk_window_set_role(GTK_WINDOW(window), "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_action_map_add_action_entries(G_ACTION_MAP(sw), sw_entries, G_N_ELEMENTS(sw_entries), sw); - g_signal_connect(G_OBJECT(window), "destroy", - G_CALLBACK(sw_close_sig), sw); - sw->sv = gtk_slide_view_new(n, slide); g_signal_connect(G_OBJECT(sw->sv), "key-press-event", G_CALLBACK(sw_key_press_sig), sw); - slide_get_logical_size(slide, narrative_get_stylesheet(n), &w, &h); - gtk_window_set_default_size(GTK_WINDOW(window), w, h); + g_signal_connect(G_OBJECT(sw->sv), "changed", + G_CALLBACK(sw_emit_change_sig), sw); - gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(sw->sv)); + slide_get_logical_size(slide, narrative_get_stylesheet(n), &w, &h); + gtk_window_set_default_size(GTK_WINDOW(sw), w, h); - gtk_window_set_resizable(GTK_WINDOW(sw->window), TRUE); + gtk_container_add(GTK_CONTAINER(sw), GTK_WIDGET(sw->sv)); - gtk_widget_show_all(window); + gtk_window_set_resizable(GTK_WINDOW(sw), TRUE); return sw; } @@ -390,11 +394,5 @@ void slide_window_update_titlebar(SlideWindow *sw) 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); -} - - -void slide_window_destroy(SlideWindow *sw) -{ - gtk_widget_destroy(sw->window); + gtk_window_set_title(GTK_WINDOW(sw), title); } |