From edba773e5ecf8fe53f25a11d1cc83d1e42c1c6b3 Mon Sep 17 00:00:00 2001 From: Pierre Pronchery Date: Sun, 17 May 2015 23:30:09 +0200 Subject: [PATCH] Implement a fullscreen mode --- src/callbacks.c | 11 +++++++++++ src/callbacks.h | 19 +++++++++++-------- src/window.c | 41 +++++++++++++++++++++++++++++++++++++++-- src/window.h | 4 ++++ 4 files changed, 65 insertions(+), 10 deletions(-) diff --git a/src/callbacks.c b/src/callbacks.c index dc9d265..a11dfb3 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -73,6 +73,17 @@ void on_view_all(gpointer data) } +/* on_view_fullscreen */ +void on_view_fullscreen(gpointer data) +{ + MixerWindow * mixer = data; + gboolean fullscreen; + + fullscreen = mixerwindow_get_fullscreen(mixer); + mixerwindow_set_fullscreen(mixer, !fullscreen); +} + + #ifdef AUDIO_MIXER_DEVINFO /* on_view_outputs */ void on_view_outputs(gpointer data) diff --git a/src/callbacks.h b/src/callbacks.h index cf9a369..4c5d691 100644 --- a/src/callbacks.h +++ b/src/callbacks.h @@ -28,15 +28,18 @@ void on_embedded(gpointer data); /* menubar */ void on_file_properties(gpointer data); void on_file_close(gpointer data); -void on_view_all(gpointer data); -void on_view_outputs(gpointer data); -void on_view_inputs(gpointer data); -void on_view_record(gpointer data); -void on_view_monitor(gpointer data); -void on_view_equalization(gpointer data); -void on_view_mix(gpointer data); -void on_view_modem(gpointer data); + void on_help_about(gpointer data); void on_help_contents(gpointer data); +void on_view_all(gpointer data); +void on_view_equalization(gpointer data); +void on_view_fullscreen(gpointer data); +void on_view_inputs(gpointer data); +void on_view_mix(gpointer data); +void on_view_modem(gpointer data); +void on_view_monitor(gpointer data); +void on_view_outputs(gpointer data); +void on_view_record(gpointer data); + #endif /* !MIXER_CALLBACKS_H */ diff --git a/src/window.c b/src/window.c index 7824c8f..18028f9 100644 --- a/src/window.c +++ b/src/window.c @@ -47,6 +47,7 @@ static char _license[] = struct _MixerWindow { Mixer * mixer; + gboolean fullscreen; /* widgets */ GtkWidget * window; @@ -95,6 +96,14 @@ static const DesktopMenu _mixer_menu_file[] = static const DesktopMenu _mixer_menu_view[] = { + { N_("_Fullscreen"), G_CALLBACK(on_view_fullscreen), +# if GTK_CHECK_VERSION(2, 8, 0) + GTK_STOCK_FULLSCREEN, +# else + NULL, +# endif + 0, GDK_KEY_F11 }, + { "", NULL, NULL, 0, 0 }, { N_("_All"), G_CALLBACK(on_view_all), NULL, GDK_CONTROL_MASK, GDK_KEY_A }, # ifdef AUDIO_MIXER_DEVINFO @@ -136,6 +145,14 @@ static DesktopToolbar _mixer_toolbar[] = { { N_("Properties"), G_CALLBACK(on_file_properties), GTK_STOCK_PROPERTIES, GDK_MOD1_MASK, GDK_KEY_Return, NULL }, + { "", NULL, NULL, 0, 0, NULL }, + { N_("Fullscreen"), G_CALLBACK(on_view_fullscreen), +# if GTK_CHECK_VERSION(2, 8, 0) + GTK_STOCK_FULLSCREEN, +# else + "gtk-fullscreen", +# endif + 0, GDK_KEY_F11, NULL }, { NULL, NULL, NULL, 0, 0, NULL }, { N_("All"), G_CALLBACK(on_view_all), "stock_select-all", 0, 0, NULL }, { N_("Outputs"), G_CALLBACK(on_view_outputs), "audio-volume-high", 0, 0, @@ -195,6 +212,7 @@ MixerWindow * mixerwindow_new(char const * device, MixerLayout layout, G_CALLBACK(on_closex), mixer); } mixer->mixer = NULL; + mixer->fullscreen = FALSE; if(mixer->window != NULL) { gtk_widget_realize(mixer->window); @@ -215,7 +233,7 @@ MixerWindow * mixerwindow_new(char const * device, MixerLayout layout, if(embedded == FALSE) { if(layout == ML_TABBED) - _mixer_menubar[1].menu = &_mixer_menu_view[1]; + _mixer_menubar[3].menu = &_mixer_menu_view[3]; widget = desktop_menubar_create(_mixer_menubar, mixer, accel); gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, TRUE, 0); } @@ -225,7 +243,7 @@ MixerWindow * mixerwindow_new(char const * device, MixerLayout layout, if(embedded == FALSE) { if(layout != ML_TABBED) - _mixer_toolbar[1].name = ""; + _mixer_toolbar[3].name = ""; widget = desktop_toolbar_create(_mixer_toolbar, mixer, accel); gtk_box_pack_start(GTK_BOX(vbox), widget, FALSE, TRUE, 0); } @@ -272,6 +290,25 @@ void mixerwindow_delete(MixerWindow * mixer) } +/* accessors */ +/* mixerwindow_get_fullscreen */ +gboolean mixerwindow_get_fullscreen(MixerWindow * mixer) +{ + return mixer->fullscreen; +} + + +/* mixerwindow_set_fullscreen */ +void mixerwindow_set_fullscreen(MixerWindow * mixer, gboolean fullscreen) +{ + if(fullscreen) + gtk_window_fullscreen(GTK_WINDOW(mixer->window)); + else + gtk_window_unfullscreen(GTK_WINDOW(mixer->window)); + mixer->fullscreen = fullscreen; +} + + /* useful */ /* mixerwindow_about */ static gboolean _about_on_closex(GtkWidget * widget); diff --git a/src/window.h b/src/window.h index 0a42df6..9157d79 100644 --- a/src/window.h +++ b/src/window.h @@ -32,6 +32,10 @@ MixerWindow * mixerwindow_new(char const * device, MixerLayout layout, gboolean embedded); void mixerwindow_delete(MixerWindow * mixer); +/* accessors */ +gboolean mixerwindow_get_fullscreen(MixerWindow * mixer); +void mixerwindow_set_fullscreen(MixerWindow * mixer, gboolean fullscreen); + /* useful */ void mixerwindow_about(MixerWindow * mixer); void mixerwindow_properties(MixerWindow * mixer);