27
27
* Author: Philip Withnall <philip@tecnocode.co.uk>
31
32
#include <gtk/gtk.h>
33
#include "video-utils.h"
34
#include "backend/video-utils.h"
34
35
#include "totem-time-entry.h"
37
static void dispose (GObject *object);
36
38
static gboolean output_cb (GtkSpinButton *self, gpointer user_data);
37
39
static gint input_cb (GtkSpinButton *self, gdouble *new_value, gpointer user_data);
40
static void notify_adjustment_cb (TotemTimeEntry *self, GParamSpec *pspec, gpointer user_data);
41
static void changed_cb (GtkAdjustment *adjustment, TotemTimeEntry *self);
43
struct TotemTimeEntryPrivate {
44
GtkAdjustment *adjustment;
45
gulong adjustment_changed_signal;
39
48
G_DEFINE_TYPE (TotemTimeEntry, totem_time_entry, GTK_TYPE_SPIN_BUTTON)
42
51
totem_time_entry_class_init (TotemTimeEntryClass *klass)
44
/* Nothing to see here; please move along */
53
GObjectClass *object_class = G_OBJECT_CLASS (klass);
55
g_type_class_add_private (klass, sizeof (TotemTimeEntryPrivate));
57
object_class->dispose = dispose;
48
61
totem_time_entry_init (TotemTimeEntry *self)
63
self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, TOTEM_TYPE_TIME_ENTRY, TotemTimeEntryPrivate);
50
65
/* Connect to signals */
51
66
g_signal_connect (self, "output", G_CALLBACK (output_cb), NULL);
52
67
g_signal_connect (self, "input", G_CALLBACK (input_cb), NULL);
68
g_signal_connect (self, "notify::adjustment", G_CALLBACK (notify_adjustment_cb), NULL);
72
dispose (GObject *object)
74
TotemTimeEntryPrivate *priv = TOTEM_TIME_ENTRY (object)->priv;
76
if (priv->adjustment != NULL) {
77
g_signal_handler_disconnect (priv->adjustment, priv->adjustment_changed_signal);
78
g_object_unref (priv->adjustment);
80
priv->adjustment = NULL;
82
G_OBJECT_CLASS (totem_time_entry_parent_class)->dispose (object);
87
117
*new_value = val / 1000;
122
notify_adjustment_cb (TotemTimeEntry *self, GParamSpec *pspec, gpointer user_data)
124
TotemTimeEntryPrivate *priv = self->priv;
126
if (priv->adjustment != NULL) {
127
g_signal_handler_disconnect (priv->adjustment, priv->adjustment_changed_signal);
128
g_object_unref (priv->adjustment);
131
priv->adjustment = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (self));
132
priv->adjustment_changed_signal = 0;
134
if (priv->adjustment != NULL) {
135
g_object_ref (priv->adjustment);
136
priv->adjustment_changed_signal = g_signal_connect (priv->adjustment, "changed", G_CALLBACK (changed_cb), self);
141
changed_cb (GtkAdjustment *adjustment, TotemTimeEntry *self)
146
/* Set the width of the entry according to the length of the longest string it'll now accept */
147
upper = (guint) gtk_adjustment_get_upper (adjustment); /* in seconds */
149
time_string = totem_time_to_string (((gint64) upper) * 1000);
150
width = strlen (time_string);
151
g_free (time_string);
153
gtk_entry_set_width_chars (GTK_ENTRY (self), width);