Some more property work

svn path=/trunk/; revision=6008
This commit is contained in:
Matthias Clasen
2007-12-01 06:12:45 +00:00
parent e919f0198b
commit 2e67aabed7
7 changed files with 249 additions and 39 deletions

View File

@@ -51,7 +51,7 @@ struct _GFileMonitorPrivate {
int rate_limit_msec;
/* Rate limiting change events */
guint32 last_sent_change_time; /* Some monitonic clock in msecs */
guint32 last_sent_change_time; /* Some monotonic clock in msecs */
GFile *last_sent_change_file;
guint send_delayed_change_timeout;
@@ -61,11 +61,68 @@ struct _GFileMonitorPrivate {
GFile *virtual_changes_done_file;
};
enum {
PROP_0,
PROP_RATE_LIMIT,
PROP_CANCELLED
};
static void
g_file_monitor_set_property (GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
GFileMonitor *monitor;
monitor = G_FILE_MONITOR (object);
switch (prop_id)
{
case PROP_RATE_LIMIT:
g_file_monitor_set_rate_limit (monitor, g_value_get_int (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
static void
g_file_monitor_get_property (GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
GFileMonitor *monitor;
GFileMonitorPrivate *priv;
monitor = G_FILE_MONITOR (object);
priv = monitor->priv;
switch (prop_id)
{
case PROP_RATE_LIMIT:
g_value_set_int (value, priv->rate_limit_msec);
break;
case PROP_CANCELLED:
g_value_set_boolean (value, priv->cancelled);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
#define DEFAULT_RATE_LIMIT_MSECS 800
#define DEFAULT_VIRTUAL_CHANGES_DONE_DELAY_SECS 2
static guint signals[LAST_SIGNAL] = { 0 };
static void
g_file_monitor_finalize (GObject *object)
{
@@ -107,12 +164,15 @@ g_file_monitor_dispose (GObject *object)
static void
g_file_monitor_class_init (GFileMonitorClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GObjectClass *object_class;
g_type_class_add_private (klass, sizeof (GFileMonitorPrivate));
gobject_class->finalize = g_file_monitor_finalize;
gobject_class->dispose = g_file_monitor_dispose;
object_class = G_OBJECT_CLASS (klass);
object_class->finalize = g_file_monitor_finalize;
object_class->dispose = g_file_monitor_dispose;
object_class->get_property = g_file_monitor_get_property;
object_class->set_property = g_file_monitor_set_property;
/**
* GFileMonitor::changed:
@@ -130,10 +190,27 @@ g_file_monitor_class_init (GFileMonitorClass *klass)
G_STRUCT_OFFSET (GFileMonitorClass, changed),
NULL, NULL,
_gio_marshal_VOID__OBJECT_OBJECT_INT,
G_TYPE_NONE,3,
G_TYPE_FILE,
G_TYPE_FILE,
G_TYPE_INT);
G_TYPE_NONE, 3,
G_TYPE_FILE, G_TYPE_FILE, G_TYPE_INT);
g_object_class_install_property (object_class,
PROP_RATE_LIMIT,
g_param_spec_int ("rate-limit",
P_("Rate limit"),
P_("The limit of the monitor to watch for changes, in milliseconds"),
0, G_MAXINT,
DEFAULT_RATE_LIMIT_MSECS,
G_PARAM_READWRITE|
G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
g_object_class_install_property (object_class,
PROP_CANCELLED,
g_param_spec_boolean ("cancelled",
P_("Cancelled"),
P_("Whether the monitor has been cancelled"),
FALSE,
G_PARAM_READABLE|
G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB));
}
static void
@@ -180,7 +257,8 @@ g_file_monitor_cancel (GFileMonitor* monitor)
return TRUE;
monitor->priv->cancelled = TRUE;
g_object_notify (G_OBJECT (monitor), "cancelled");
klass = G_FILE_MONITOR_GET_CLASS (monitor);
return (* klass->cancel) (monitor);
}
@@ -199,9 +277,14 @@ void
g_file_monitor_set_rate_limit (GFileMonitor *monitor,
int limit_msecs)
{
GFileMonitorPrivate *priv;
g_return_if_fail (G_IS_FILE_MONITOR (monitor));
monitor->priv->rate_limit_msec = limit_msecs;
priv = monitor->priv;
if (priv->rate_limit_msec != limit_msecs)
{
monitor->priv->rate_limit_msec = limit_msecs;
g_object_notify (G_OBJECT (monitor), "rate-limit");
}
}
static guint32