diff options
-rw-r--r-- | data/eom-preferences-dialog.ui | 17 | ||||
-rw-r--r-- | data/org.mate.eom.gschema.xml.in.in | 5 | ||||
-rw-r--r-- | src/eom-config-keys.h | 1 | ||||
-rw-r--r-- | src/eom-preferences-dialog.c | 21 | ||||
-rw-r--r-- | src/eom-window.c | 12 |
5 files changed, 55 insertions, 1 deletions
diff --git a/data/eom-preferences-dialog.ui b/data/eom-preferences-dialog.ui index 6509845..fff0a3e 100644 --- a/data/eom-preferences-dialog.ui +++ b/data/eom-preferences-dialog.ui @@ -523,6 +523,21 @@ </packing> </child> <child> + <object class="GtkCheckButton" id="random_check"> + <property name="label" translatable="yes">_Random sequence</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="use_underline">True</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> <object class="GtkCheckButton" id="loop_check"> <property name="label" translatable="yes">_Loop sequence</property> <property name="visible">True</property> @@ -534,7 +549,7 @@ <packing> <property name="expand">False</property> <property name="fill">False</property> - <property name="position">1</property> + <property name="position">2</property> </packing> </child> </object> diff --git a/data/org.mate.eom.gschema.xml.in.in b/data/org.mate.eom.gschema.xml.in.in index 80b0369..92ede90 100644 --- a/data/org.mate.eom.gschema.xml.in.in +++ b/data/org.mate.eom.gschema.xml.in.in @@ -53,6 +53,11 @@ </key> </schema> <schema id="org.mate.eom.full-screen" path="/org/mate/eom/full-screen/"> + <key name="random" type="b"> + <default>false</default> + <_summary>Randomize the image sequence</_summary> + <_description>Whether the sequence of images should be shown in an random loop.</_description> + </key> <key name="loop" type="b"> <default>true</default> <_summary>Loop through the image sequence</_summary> diff --git a/src/eom-config-keys.h b/src/eom-config-keys.h index c4a35ae..c69d0cf 100644 --- a/src/eom-config-keys.h +++ b/src/eom-config-keys.h @@ -47,6 +47,7 @@ #define EOM_CONF_VIEW_USE_BG_COLOR "use-background-color" #define EOM_CONF_FULLSCREEN_SCHEMA "org.mate.eom.full-screen" +#define EOM_CONF_FULLSCREEN_RANDOM "random" #define EOM_CONF_FULLSCREEN_LOOP "loop" #define EOM_CONF_FULLSCREEN_UPSCALE "upscale" #define EOM_CONF_FULLSCREEN_SECONDS "seconds" diff --git a/src/eom-preferences-dialog.c b/src/eom-preferences-dialog.c index e11847b..0a46606 100644 --- a/src/eom-preferences-dialog.c +++ b/src/eom-preferences-dialog.c @@ -95,6 +95,12 @@ pd_radio_toggle_cb (GtkWidget *widget, GSettings *settings) } static void +random_change_cb (GSettings *settings, gchar *key, GtkWidget *widget) +{ + gtk_widget_set_sensitive (widget, !g_settings_get_boolean (settings, key)); +} + +static void eom_preferences_response_cb (GtkDialog *dlg, gint res_id, gpointer data) { switch (res_id) { @@ -125,6 +131,7 @@ eom_preferences_dialog_constructor (GType type, GtkWidget *background_radio; GtkWidget *color_button; GtkWidget *upscale_check; + GtkWidget *random_check; GtkWidget *loop_check; GtkWidget *seconds_spin; GtkWidget *plugin_manager; @@ -154,6 +161,7 @@ eom_preferences_dialog_constructor (GType type, "background_radio", &background_radio, "color_button", &color_button, "upscale_check", &upscale_check, + "random_check", &random_check, "loop_check", &loop_check, "seconds_spin", &seconds_spin, "plugin_manager_container", &plugin_manager_container, @@ -288,6 +296,19 @@ eom_preferences_dialog_constructor (GType type, G_SETTINGS_BIND_DEFAULT); g_settings_bind (priv->fullscreen_settings, + EOM_CONF_FULLSCREEN_RANDOM, + G_OBJECT (random_check), + "active", + G_SETTINGS_BIND_DEFAULT); + g_signal_connect (priv->fullscreen_settings, + "changed::" EOM_CONF_FULLSCREEN_RANDOM, + G_CALLBACK (random_change_cb), + loop_check); + random_change_cb (priv->fullscreen_settings, + EOM_CONF_FULLSCREEN_RANDOM, + loop_check); + + g_settings_bind (priv->fullscreen_settings, EOM_CONF_FULLSCREEN_SECONDS, G_OBJECT (seconds_spin), "value", diff --git a/src/eom-window.c b/src/eom-window.c index b159e13..366b2dc 100644 --- a/src/eom-window.c +++ b/src/eom-window.c @@ -153,6 +153,7 @@ struct _EomWindowPrivate { GtkWidget *fullscreen_popup; GSource *fullscreen_timeout_source; + gboolean slideshow_random; gboolean slideshow_loop; gint slideshow_switch_timeout; GSource *slideshow_switch_source; @@ -1918,6 +1919,12 @@ slideshow_switch_cb (gpointer data) eom_debug (DEBUG_WINDOW); + if (priv->slideshow_random) { + eom_thumb_view_select_single (EOM_THUMB_VIEW (priv->thumbview), + EOM_THUMB_VIEW_SELECT_RANDOM); + return TRUE; + } + if (!priv->slideshow_loop && slideshow_is_loop_end (window)) { eom_window_stop_fullscreen (window, TRUE); return FALSE; @@ -2239,6 +2246,10 @@ eom_window_run_fullscreen (EomWindow *window, gboolean slideshow) fullscreen_set_timeout (window); if (slideshow) { + priv->slideshow_random = + g_settings_get_boolean (priv->fullscreen_settings, + EOM_CONF_FULLSCREEN_RANDOM); + priv->slideshow_loop = g_settings_get_boolean (priv->fullscreen_settings, EOM_CONF_FULLSCREEN_LOOP); @@ -4653,6 +4664,7 @@ eom_window_init (EomWindow *window) window->priv->fullscreen_popup = NULL; window->priv->fullscreen_timeout_source = NULL; + window->priv->slideshow_random = FALSE; window->priv->slideshow_loop = FALSE; window->priv->slideshow_switch_timeout = 0; window->priv->slideshow_switch_source = NULL; |