mirror of
https://github.com/Rafostar/clapper.git
synced 2025-08-30 16:02:00 +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;
|
gboolean need_init_state;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define parent_class clapper_app_application_parent_class
|
||||||
|
G_DEFINE_TYPE (ClapperAppApplication, clapper_app_application, GTK_TYPE_APPLICATION);
|
||||||
|
|
||||||
struct ClapperPluginFeatureData
|
struct ClapperPluginFeatureData
|
||||||
{
|
{
|
||||||
const gchar *name;
|
const gchar *name;
|
||||||
@@ -58,8 +61,16 @@ struct ClapperPluginData
|
|||||||
struct ClapperPluginFeatureData features[10];
|
struct ClapperPluginFeatureData features[10];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
const gchar *action;
|
||||||
|
const gchar *accels[3];
|
||||||
|
} ClapperAppShortcut;
|
||||||
|
|
||||||
struct ClapperAppOptions
|
struct ClapperAppOptions
|
||||||
{
|
{
|
||||||
|
gboolean enqueue;
|
||||||
|
|
||||||
gdouble volume;
|
gdouble volume;
|
||||||
gdouble speed;
|
gdouble speed;
|
||||||
|
|
||||||
@@ -70,25 +81,14 @@ struct ClapperAppOptions
|
|||||||
gchar *audio_sink;
|
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
|
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->video_filter);
|
||||||
g_free (app_opts.audio_filter);
|
g_free (app_opts->audio_filter);
|
||||||
|
|
||||||
g_free (app_opts.video_sink);
|
g_free (app_opts->video_sink);
|
||||||
g_free (app_opts.audio_sink);
|
g_free (app_opts->audio_sink);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
@@ -251,32 +251,33 @@ show_about (GSimpleAction *action, GVariant *param, gpointer user_data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
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);
|
ClapperPlayer *player = clapper_app_window_get_player (app_window);
|
||||||
ClapperQueue *queue = clapper_player_get_queue (player);
|
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)
|
if (app_opts->video_filter)
|
||||||
clapper_player_set_video_filter (player, clapper_app_utils_make_element (app_opts.video_filter));
|
clapper_player_set_video_filter (player, clapper_app_utils_make_element (app_opts->video_filter));
|
||||||
if (app_opts.audio_filter)
|
if (app_opts->audio_filter)
|
||||||
clapper_player_set_audio_filter (player, clapper_app_utils_make_element (app_opts.audio_filter));
|
clapper_player_set_audio_filter (player, clapper_app_utils_make_element (app_opts->audio_filter));
|
||||||
if (app_opts.video_sink)
|
if (app_opts->video_sink)
|
||||||
clapper_player_set_video_sink (player, clapper_app_utils_make_element (app_opts.video_sink));
|
clapper_player_set_video_sink (player, clapper_app_utils_make_element (app_opts->video_sink));
|
||||||
if (app_opts.audio_sink)
|
if (app_opts->audio_sink)
|
||||||
clapper_player_set_audio_sink (player, clapper_app_utils_make_element (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 */
|
/* NOTE: Not using ternary operator to avoid accidental typecasting */
|
||||||
if (app_opts.volume >= 0)
|
if (app_opts->volume >= 0)
|
||||||
clapper_player_set_volume (player, PERCENTAGE_ROUND (app_opts.volume));
|
clapper_player_set_volume (player, PERCENTAGE_ROUND (app_opts->volume));
|
||||||
else
|
else
|
||||||
clapper_player_set_volume (player, PERCENTAGE_ROUND (g_settings_get_double (self->settings, "volume")));
|
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"));
|
clapper_player_set_mute (player, g_settings_get_boolean (self->settings, "mute"));
|
||||||
|
|
||||||
if (app_opts.speed >= 0)
|
if (app_opts->speed >= 0)
|
||||||
clapper_player_set_speed (player, PERCENTAGE_ROUND (app_opts.speed));
|
clapper_player_set_speed (player, PERCENTAGE_ROUND (app_opts->speed));
|
||||||
else
|
else
|
||||||
clapper_player_set_speed (player, PERCENTAGE_ROUND (g_settings_get_double (self->settings, "speed")));
|
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"))
|
else if (g_settings_get_boolean (self->settings, "maximized"))
|
||||||
gtk_window_maximize (GTK_WINDOW (app_window));
|
gtk_window_maximize (GTK_WINDOW (app_window));
|
||||||
|
|
||||||
GST_DEBUG ("Configuration restored");
|
GST_DEBUG ("Configuration applied");
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
@@ -355,10 +356,8 @@ clapper_app_application_activate (GApplication *app)
|
|||||||
GST_INFO ("Activate");
|
GST_INFO ("Activate");
|
||||||
G_APPLICATION_CLASS (parent_class)->activate (app);
|
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)));
|
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) {
|
if (self->need_init_state) {
|
||||||
_assemble_initial_state (window);
|
_assemble_initial_state (window);
|
||||||
@@ -393,10 +392,12 @@ clapper_app_application_local_command_line (GApplication *app,
|
|||||||
static gint
|
static gint
|
||||||
clapper_app_application_command_line (GApplication *app, GApplicationCommandLine *cmd_line)
|
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;
|
GVariantDict *options;
|
||||||
GFile **files = NULL;
|
GFile **files = NULL;
|
||||||
gint n_files = 0;
|
gint n_files = 0;
|
||||||
gboolean enqueue = FALSE;
|
|
||||||
|
|
||||||
GST_INFO ("Handling command line");
|
GST_INFO ("Handling command line");
|
||||||
|
|
||||||
@@ -404,15 +405,31 @@ clapper_app_application_command_line (GApplication *app, GApplicationCommandLine
|
|||||||
|
|
||||||
/* Enqueue only makes sense from remote invocation */
|
/* Enqueue only makes sense from remote invocation */
|
||||||
if (g_application_command_line_get_is_remote (cmd_line))
|
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)) {
|
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);
|
clapper_app_utils_files_free (files);
|
||||||
} else {
|
} else {
|
||||||
g_application_activate (app);
|
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;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -574,9 +591,6 @@ clapper_app_application_open (GApplication *app,
|
|||||||
static void
|
static void
|
||||||
clapper_app_application_init (ClapperAppApplication *self)
|
clapper_app_application_init (ClapperAppApplication *self)
|
||||||
{
|
{
|
||||||
app_opts.volume = -1;
|
|
||||||
app_opts.speed = -1;
|
|
||||||
|
|
||||||
self->need_init_state = TRUE;
|
self->need_init_state = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -589,12 +603,12 @@ clapper_app_application_constructed (GObject *object)
|
|||||||
|
|
||||||
const GOptionEntry app_options[] = {
|
const GOptionEntry app_options[] = {
|
||||||
{ "enqueue", 0, 0, G_OPTION_ARG_NONE, NULL, _("Add media to queue in primary application instance"), NULL },
|
{ "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 },
|
{ "volume", 0, 0, G_OPTION_ARG_DOUBLE, NULL, _("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 },
|
{ "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, &app_opts.video_filter, _("Video filter to use (\"none\" to disable)"), 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, &app_opts.audio_filter, _("Audio 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, &app_opts.video_sink, _("Video sink to use"), NULL },
|
{ "video-sink", 0, 0, G_OPTION_ARG_STRING, NULL, _("Video sink to use"), NULL },
|
||||||
{ "audio-sink", 0, 0, G_OPTION_ARG_STRING, &app_opts.audio_sink, _("Audio sink to use"), NULL },
|
{ "audio-sink", 0, 0, G_OPTION_ARG_STRING, NULL, _("Audio sink to use"), NULL },
|
||||||
{ NULL }
|
{ NULL }
|
||||||
};
|
};
|
||||||
static const GActionEntry app_actions[] = {
|
static const GActionEntry app_actions[] = {
|
||||||
@@ -646,7 +660,6 @@ clapper_app_application_finalize (GObject *object)
|
|||||||
GST_TRACE ("Finalize");
|
GST_TRACE ("Finalize");
|
||||||
|
|
||||||
g_object_unref (self->settings);
|
g_object_unref (self->settings);
|
||||||
_app_opts_free ();
|
|
||||||
|
|
||||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user