aboutsummaryrefslogtreecommitdiff
path: root/fastiv.c
diff options
context:
space:
mode:
authorPřemysl Eric Janouch <p@janouch.name>2021-12-19 07:04:04 +0100
committerPřemysl Eric Janouch <p@janouch.name>2021-12-19 07:04:34 +0100
commitae57c45c2a104beeae5b031d7e18e21cc6f2408c (patch)
treefa353ba6328a3f34a09a380bdbe51d72c3e81d80 /fastiv.c
parentbac92f26127681d0592efb7017657200cccd0e0f (diff)
downloadfiv-ae57c45c2a104beeae5b031d7e18e21cc6f2408c.tar.gz
fiv-ae57c45c2a104beeae5b031d7e18e21cc6f2408c.tar.xz
fiv-ae57c45c2a104beeae5b031d7e18e21cc6f2408c.zip
Insensivitize inappropriate toolbar actions
Diffstat (limited to 'fastiv.c')
-rw-r--r--fastiv.c47
1 files changed, 43 insertions, 4 deletions
diff --git a/fastiv.c b/fastiv.c
index 2129d50..daa1a53 100644
--- a/fastiv.c
+++ b/fastiv.c
@@ -602,9 +602,7 @@ make_toolbar_button(const gchar *symbolic, const gchar *tooltip)
GtkWidget *button =
gtk_button_new_from_icon_name(symbolic, GTK_ICON_SIZE_BUTTON);
gtk_widget_set_tooltip_text(button, tooltip);
-// gtk_widget_set_sensitive(button, FALSE);
gtk_widget_set_focus_on_click(button, FALSE);
-
gtk_style_context_add_class(
gtk_widget_get_style_context(button), GTK_STYLE_CLASS_FLAT);
return button;
@@ -617,9 +615,7 @@ make_toolbar_toggle(const gchar *symbolic, const gchar *tooltip)
gtk_button_set_image(GTK_BUTTON(button),
gtk_image_new_from_icon_name(symbolic, GTK_ICON_SIZE_BUTTON));
gtk_widget_set_tooltip_text(button, tooltip);
-// gtk_widget_set_sensitive(button, FALSE);
gtk_widget_set_focus_on_click(button, FALSE);
-
gtk_style_context_add_class(
gtk_widget_get_style_context(button), GTK_STYLE_CLASS_FLAT);
return button;
@@ -637,6 +633,42 @@ make_separator(void)
}
static void
+on_view_actions_changed(void)
+{
+ gboolean has_image = FALSE, can_animate = FALSE;
+ gboolean has_previous = FALSE, has_next = FALSE;
+ g_object_get(g.view, "has-image", &has_image, "can-animate", &can_animate,
+ "has-previous-page", &has_previous, "has-next-page", &has_next, NULL);
+
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_PAGE_FIRST], has_previous);
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_PAGE_PREVIOUS], has_previous);
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_PAGE_NEXT], has_next);
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_PAGE_LAST], has_next);
+
+ // We don't want these to flash during playback.
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_SKIP_BACK], can_animate);
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_SEEK_BACK], can_animate);
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_PLAY_PAUSE], can_animate);
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_SEEK_FORWARD], can_animate);
+
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_PLUS], has_image);
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_SCALE], has_image);
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_MINUS], has_image);
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_ONE], has_image);
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_FIT], has_image);
+
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_SMOOTH], has_image);
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_SAVE], has_image);
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_PRINT], has_image);
+
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_LEFT], has_image);
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_MIRROR], has_image);
+ gtk_widget_set_sensitive(g.toolbar[TOOLBAR_RIGHT], has_image);
+}
+
+// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+static void
on_notify_view_scale(
GObject *object, GParamSpec *param_spec, G_GNUC_UNUSED gpointer user_data)
{
@@ -771,6 +803,13 @@ make_view_toolbar(void)
g_object_notify(G_OBJECT(g.view), "playing");
g_object_notify(G_OBJECT(g.view), "scale-to-fit");
g_object_notify(G_OBJECT(g.view), "filter");
+
+ GCallback callback = G_CALLBACK(on_view_actions_changed);
+ g_signal_connect(g.view, "notify::has-image", callback, NULL);
+ g_signal_connect(g.view, "notify::can-animate", callback, NULL);
+ g_signal_connect(g.view, "notify::has-previous-page", callback, NULL);
+ g_signal_connect(g.view, "notify::has-next-page", callback, NULL);
+ callback();
return view_toolbar;
}