From 69dedd422cc90fac8f2f392b67e8dc0e7a9f3b0b Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Tue, 5 Nov 2013 01:19:10 +0100 Subject: [PATCH] Added a way to leave the presentation from the keyboard or the mouse --- src/presenter.c | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/src/presenter.c b/src/presenter.c index 8aa11c9..33cc6c9 100644 --- a/src/presenter.c +++ b/src/presenter.c @@ -58,6 +58,7 @@ struct _Presenter /* slideshow */ GtkWidget * sl_window; + GtkWidget * sl_toolbar; }; @@ -85,6 +86,7 @@ static void _presenter_on_save(gpointer data); static void _presenter_on_save_as(gpointer data); static void _presenter_on_select_all(gpointer data); static void _presenter_on_slideshow(gpointer data); +static void _presenter_on_slideshow_close(gpointer data); static gboolean _presenter_on_slideshow_closex(gpointer data); #ifndef EMBEDDED static void _presenter_on_unselect_all(gpointer data); @@ -112,6 +114,12 @@ static const DesktopAccel _presenter_accel[] = }; #endif +static const DesktopAccel _presenter_accel_slideshow[] = +{ + { G_CALLBACK(_presenter_on_slideshow_close), 0, GDK_KEY_Escape }, + { NULL, 0, 0 } +}; + #ifndef EMBEDDED static const DesktopMenu _presenter_menu_file[] = { @@ -491,14 +499,31 @@ static void _presenter_present(Presenter * presenter) static void _present_window(Presenter * presenter) { + GtkAccelGroup * group; GdkColor black; + GtkWidget * vbox; + GtkToolItem * toolitem; + group = gtk_accel_group_new(); presenter->sl_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); + gtk_window_add_accel_group(GTK_WINDOW(presenter->sl_window), group); + desktop_accel_create(_presenter_accel_slideshow, presenter, group); + g_object_unref(group); gtk_window_set_keep_above(GTK_WINDOW(presenter->sl_window), TRUE); memset(&black, 0, sizeof(black)); gtk_widget_modify_bg(presenter->sl_window, GTK_STATE_NORMAL, &black); g_signal_connect_swapped(presenter->sl_window, "delete-event", G_CALLBACK(_presenter_on_slideshow_closex), presenter); + vbox = gtk_vbox_new(FALSE, 0); + presenter->sl_toolbar = gtk_toolbar_new(); + toolitem = gtk_tool_button_new_from_stock(GTK_STOCK_QUIT); + g_signal_connect_swapped(toolitem, "clicked", G_CALLBACK( + _presenter_on_slideshow_close), presenter); + gtk_toolbar_insert(GTK_TOOLBAR(presenter->sl_toolbar), toolitem, -1); + gtk_box_pack_start(GTK_BOX(vbox), presenter->sl_toolbar, FALSE, TRUE, + 0); + gtk_container_add(GTK_CONTAINER(presenter->sl_window), vbox); + gtk_widget_show_all(vbox); } @@ -632,12 +657,21 @@ static void _presenter_on_slideshow(gpointer data) } -/* presenter_on_slideshow */ -static gboolean _presenter_on_slideshow_closex(gpointer data) +/* presenter_on_slideshow_close */ +static void _presenter_on_slideshow_close(gpointer data) { Presenter * presenter = data; gtk_widget_hide(presenter->sl_window); +} + + +/* presenter_on_slideshow_closex */ +static gboolean _presenter_on_slideshow_closex(gpointer data) +{ + Presenter * presenter = data; + + _presenter_on_slideshow_close(presenter); return TRUE; }