mirror of
https://github.com/Rafostar/clapper.git
synced 2025-08-29 23:32:04 +02:00
clapper-app: Cleanup to not store app options as global and static
Now that we are using both local and global command line vfuncs, we can just get and apply options in them and free values later. This avoids having options global and static.
This commit is contained in:
@@ -45,6 +45,9 @@ struct _ClapperAppApplication
|
||||
gboolean need_init_state;
|
||||
};
|
||||
|
||||
#define parent_class clapper_app_application_parent_class
|
||||
G_DEFINE_TYPE (ClapperAppApplication, clapper_app_application, GTK_TYPE_APPLICATION);
|
||||
|
||||
struct ClapperPluginFeatureData
|
||||
{
|
||||
const gchar *name;
|
||||
@@ -58,8 +61,16 @@ struct ClapperPluginData
|
||||
struct ClapperPluginFeatureData features[10];
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const gchar *action;
|
||||
const gchar *accels[3];
|
||||
} ClapperAppShortcut;
|
||||
|
||||
struct ClapperAppOptions
|
||||
{
|
||||
gboolean enqueue;
|
||||
|
||||
gdouble volume;
|
||||
gdouble speed;
|
||||
|
||||
@@ -70,25 +81,14 @@ struct ClapperAppOptions
|
||||
gchar *audio_sink;
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const gchar *action;
|
||||
const gchar *accels[3];
|
||||
} ClapperAppShortcut;
|
||||
|
||||
#define parent_class clapper_app_application_parent_class
|
||||
G_DEFINE_TYPE (ClapperAppApplication, clapper_app_application, GTK_TYPE_APPLICATION);
|
||||
|
||||
static struct ClapperAppOptions app_opts = { 0, };
|
||||
|
||||
static inline void
|
||||
_app_opts_free (void)
|
||||
_app_opts_free_contents (struct ClapperAppOptions *app_opts)
|
||||
{
|
||||
g_free (app_opts.video_filter);
|
||||
g_free (app_opts.audio_filter);
|
||||
g_free (app_opts->video_filter);
|
||||
g_free (app_opts->audio_filter);
|
||||
|
||||
g_free (app_opts.video_sink);
|
||||
g_free (app_opts.audio_sink);
|
||||
g_free (app_opts->video_sink);
|
||||
g_free (app_opts->audio_sink);
|
||||
}
|
||||
|
||||
static inline void
|
||||
@@ -251,32 +251,33 @@ show_about (GSimpleAction *action, GVariant *param, gpointer user_data)
|
||||
}
|
||||
|
||||
static inline void
|
||||
_restore_settings_to_window (ClapperAppApplication *self, ClapperAppWindow *app_window)
|
||||
_apply_settings_to_window (ClapperAppApplication *self, ClapperAppWindow *app_window,
|
||||
const struct ClapperAppOptions *app_opts)
|
||||
{
|
||||
ClapperPlayer *player = clapper_app_window_get_player (app_window);
|
||||
ClapperQueue *queue = clapper_player_get_queue (player);
|
||||
|
||||
GST_DEBUG ("Restoring saved GSettings values to: %" GST_PTR_FORMAT, app_window);
|
||||
GST_DEBUG ("Applying settings values to: %" GST_PTR_FORMAT, app_window);
|
||||
|
||||
if (app_opts.video_filter)
|
||||
clapper_player_set_video_filter (player, clapper_app_utils_make_element (app_opts.video_filter));
|
||||
if (app_opts.audio_filter)
|
||||
clapper_player_set_audio_filter (player, clapper_app_utils_make_element (app_opts.audio_filter));
|
||||
if (app_opts.video_sink)
|
||||
clapper_player_set_video_sink (player, clapper_app_utils_make_element (app_opts.video_sink));
|
||||
if (app_opts.audio_sink)
|
||||
clapper_player_set_audio_sink (player, clapper_app_utils_make_element (app_opts.audio_sink));
|
||||
if (app_opts->video_filter)
|
||||
clapper_player_set_video_filter (player, clapper_app_utils_make_element (app_opts->video_filter));
|
||||
if (app_opts->audio_filter)
|
||||
clapper_player_set_audio_filter (player, clapper_app_utils_make_element (app_opts->audio_filter));
|
||||
if (app_opts->video_sink)
|
||||
clapper_player_set_video_sink (player, clapper_app_utils_make_element (app_opts->video_sink));
|
||||
if (app_opts->audio_sink)
|
||||
clapper_player_set_audio_sink (player, clapper_app_utils_make_element (app_opts->audio_sink));
|
||||
|
||||
/* NOTE: Not using ternary operator to avoid accidental typecasting */
|
||||
if (app_opts.volume >= 0)
|
||||
clapper_player_set_volume (player, PERCENTAGE_ROUND (app_opts.volume));
|
||||
if (app_opts->volume >= 0)
|
||||
clapper_player_set_volume (player, PERCENTAGE_ROUND (app_opts->volume));
|
||||
else
|
||||
clapper_player_set_volume (player, PERCENTAGE_ROUND (g_settings_get_double (self->settings, "volume")));
|
||||
|
||||
clapper_player_set_mute (player, g_settings_get_boolean (self->settings, "mute"));
|
||||
|
||||
if (app_opts.speed >= 0)
|
||||
clapper_player_set_speed (player, PERCENTAGE_ROUND (app_opts.speed));
|
||||
if (app_opts->speed >= 0)
|
||||
clapper_player_set_speed (player, PERCENTAGE_ROUND (app_opts->speed));
|
||||
else
|
||||
clapper_player_set_speed (player, PERCENTAGE_ROUND (g_settings_get_double (self->settings, "speed")));
|
||||
|
||||
@@ -288,7 +289,7 @@ _restore_settings_to_window (ClapperAppApplication *self, ClapperAppWindow *app_
|
||||
else if (g_settings_get_boolean (self->settings, "maximized"))
|
||||
gtk_window_maximize (GTK_WINDOW (app_window));
|
||||
|
||||
GST_DEBUG ("Configuration restored");
|
||||
GST_DEBUG ("Configuration applied");
|
||||
}
|
||||
|
||||
static inline void
|
||||
@@ -355,10 +356,8 @@ clapper_app_application_activate (GApplication *app)
|
||||
GST_INFO ("Activate");
|
||||
G_APPLICATION_CLASS (parent_class)->activate (app);
|
||||
|
||||
if (!(window = gtk_application_get_active_window (GTK_APPLICATION (app)))) {
|
||||
if (!(window = gtk_application_get_active_window (GTK_APPLICATION (app))))
|
||||
window = GTK_WINDOW (clapper_app_window_new (GTK_APPLICATION (app)));
|
||||
_restore_settings_to_window (self, CLAPPER_APP_WINDOW_CAST (window));
|
||||
}
|
||||
|
||||
if (self->need_init_state) {
|
||||
_assemble_initial_state (window);
|
||||
@@ -393,10 +392,12 @@ clapper_app_application_local_command_line (GApplication *app,
|
||||
static gint
|
||||
clapper_app_application_command_line (GApplication *app, GApplicationCommandLine *cmd_line)
|
||||
{
|
||||
ClapperAppApplication *self = CLAPPER_APP_APPLICATION_CAST (app);
|
||||
struct ClapperAppOptions app_opts = { 0, };
|
||||
GtkWindow *window;
|
||||
GVariantDict *options;
|
||||
GFile **files = NULL;
|
||||
gint n_files = 0;
|
||||
gboolean enqueue = FALSE;
|
||||
|
||||
GST_INFO ("Handling command line");
|
||||
|
||||
@@ -404,15 +405,31 @@ clapper_app_application_command_line (GApplication *app, GApplicationCommandLine
|
||||
|
||||
/* Enqueue only makes sense from remote invocation */
|
||||
if (g_application_command_line_get_is_remote (cmd_line))
|
||||
enqueue = g_variant_dict_contains (options, "enqueue");
|
||||
app_opts.enqueue = g_variant_dict_contains (options, "enqueue");
|
||||
|
||||
if (!g_variant_dict_lookup (options, "volume", "d", &app_opts.volume))
|
||||
app_opts.volume = -1;
|
||||
if (!g_variant_dict_lookup (options, "speed", "d", &app_opts.speed))
|
||||
app_opts.speed = -1;
|
||||
|
||||
g_variant_dict_lookup (options, "video-filter", "s", &app_opts.video_filter);
|
||||
g_variant_dict_lookup (options, "audio-filter", "s", &app_opts.audio_filter);
|
||||
|
||||
g_variant_dict_lookup (options, "video-sink", "s", &app_opts.video_sink);
|
||||
g_variant_dict_lookup (options, "audio-sink", "s", &app_opts.audio_sink);
|
||||
|
||||
if (clapper_app_utils_files_from_command_line (cmd_line, &files, &n_files)) {
|
||||
g_application_open (app, files, n_files, (enqueue) ? "add-only" : "");
|
||||
g_application_open (app, files, n_files, (app_opts.enqueue) ? "add-only" : "");
|
||||
clapper_app_utils_files_free (files);
|
||||
} else {
|
||||
g_application_activate (app);
|
||||
}
|
||||
|
||||
window = gtk_application_get_active_window (GTK_APPLICATION (app));
|
||||
_apply_settings_to_window (self, CLAPPER_APP_WINDOW_CAST (window), &app_opts);
|
||||
|
||||
_app_opts_free_contents (&app_opts);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
@@ -574,9 +591,6 @@ clapper_app_application_open (GApplication *app,
|
||||
static void
|
||||
clapper_app_application_init (ClapperAppApplication *self)
|
||||
{
|
||||
app_opts.volume = -1;
|
||||
app_opts.speed = -1;
|
||||
|
||||
self->need_init_state = TRUE;
|
||||
}
|
||||
|
||||
@@ -589,12 +603,12 @@ clapper_app_application_constructed (GObject *object)
|
||||
|
||||
const GOptionEntry app_options[] = {
|
||||
{ "enqueue", 0, 0, G_OPTION_ARG_NONE, NULL, _("Add media to queue in primary application instance"), NULL },
|
||||
{ "volume", 0, 0, G_OPTION_ARG_DOUBLE, &app_opts.volume, _("Audio volume to set (0 - 2.0 range)"), NULL },
|
||||
{ "speed", 0, 0, G_OPTION_ARG_DOUBLE, &app_opts.speed, _("Playback speed to set (0.05 - 2.0 range)"), NULL },
|
||||
{ "video-filter", 0, 0, G_OPTION_ARG_STRING, &app_opts.video_filter, _("Video filter to use (\"none\" to disable)"), NULL },
|
||||
{ "audio-filter", 0, 0, G_OPTION_ARG_STRING, &app_opts.audio_filter, _("Audio filter to use (\"none\" to disable)"), NULL },
|
||||
{ "video-sink", 0, 0, G_OPTION_ARG_STRING, &app_opts.video_sink, _("Video sink to use"), NULL },
|
||||
{ "audio-sink", 0, 0, G_OPTION_ARG_STRING, &app_opts.audio_sink, _("Audio sink to use"), NULL },
|
||||
{ "volume", 0, 0, G_OPTION_ARG_DOUBLE, NULL, _("Audio volume to set (0 - 2.0 range)"), NULL },
|
||||
{ "speed", 0, 0, G_OPTION_ARG_DOUBLE, NULL, _("Playback speed to set (0.05 - 2.0 range)"), NULL },
|
||||
{ "video-filter", 0, 0, G_OPTION_ARG_STRING, NULL, _("Video filter to use (\"none\" to disable)"), NULL },
|
||||
{ "audio-filter", 0, 0, G_OPTION_ARG_STRING, NULL, _("Audio filter to use (\"none\" to disable)"), NULL },
|
||||
{ "video-sink", 0, 0, G_OPTION_ARG_STRING, NULL, _("Video sink to use"), NULL },
|
||||
{ "audio-sink", 0, 0, G_OPTION_ARG_STRING, NULL, _("Audio sink to use"), NULL },
|
||||
{ NULL }
|
||||
};
|
||||
static const GActionEntry app_actions[] = {
|
||||
@@ -646,7 +660,6 @@ clapper_app_application_finalize (GObject *object)
|
||||
GST_TRACE ("Finalize");
|
||||
|
||||
g_object_unref (self->settings);
|
||||
_app_opts_free ();
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
}
|
||||
|
Reference in New Issue
Block a user