Add an option for polling dock devices in UPower.conf, defaulting to false

This commit is contained in:
Richard Hughes 2011-03-03 14:02:27 +00:00
parent 11301ae3d6
commit 38199e44ff
5 changed files with 62 additions and 3 deletions

View file

@ -20,3 +20,12 @@ SleepTimeout=1000
# default=true # default=true
AllowHibernateEncryptedSwap=true AllowHibernateEncryptedSwap=true
# Poll the kernel for dock state changes.
#
# Some drivers are still broken, and do not send out uvents when the
# connected state changes.
#
# default=false
PollDockDevices=false

View file

@ -5,6 +5,7 @@ INCLUDES = \
-DUP_COMPILATION \ -DUP_COMPILATION \
-DG_UDEV_API_IS_SUBJECT_TO_CHANGE \ -DG_UDEV_API_IS_SUBJECT_TO_CHANGE \
-DG_LOG_DOMAIN=\"UPower-Linux\" \ -DG_LOG_DOMAIN=\"UPower-Linux\" \
-DPACKAGE_SYSCONF_DIR=\""$(sysconfdir)"\" \
-I$(top_srcdir)/libupower-glib \ -I$(top_srcdir)/libupower-glib \
$(USB_CFLAGS) \ $(USB_CFLAGS) \
$(GIO_CFLAGS) \ $(GIO_CFLAGS) \

View file

@ -283,6 +283,38 @@ up_backend_uevent_signal_handler_cb (GUdevClient *client, const gchar *action,
} }
} }
/**
* up_backend_should_poll_docks:
**/
static gboolean
up_backend_should_poll_docks (void)
{
gboolean ret;
GKeyFile *keyfile;
GError *error = NULL;
/* get the settings from the config file */
keyfile = g_key_file_new ();
ret = g_key_file_load_from_file (keyfile,
PACKAGE_SYSCONF_DIR "/UPower/UPower.conf",
G_KEY_FILE_NONE,
&error);
if (!ret) {
g_error ("Failed to get poll setting, assuming FALSE: %s",
error->message);
g_error_free (error);
goto out;
}
ret = g_key_file_get_boolean (keyfile,
"UPower",
"PollDockDevices",
NULL);
g_debug ("Polling docks: %s", ret ? "YES" : "NO");
out:
g_key_file_free (keyfile);
return ret;
}
/** /**
* up_backend_coldplug: * up_backend_coldplug:
* @backend: The %UpBackend class instance * @backend: The %UpBackend class instance
@ -323,6 +355,8 @@ up_backend_coldplug (UpBackend *backend, UpDaemon *daemon)
/* add dock update object */ /* add dock update object */
backend->priv->dock = up_dock_new (); backend->priv->dock = up_dock_new ();
ret = up_backend_should_poll_docks ();
up_dock_set_should_poll (backend->priv->dock, ret);
ret = up_dock_coldplug (backend->priv->dock, daemon); ret = up_dock_coldplug (backend->priv->dock, daemon);
if (!ret) if (!ret)
g_warning ("failed to coldplug dock devices"); g_warning ("failed to coldplug dock devices");

View file

@ -103,6 +103,22 @@ up_dock_poll_cb (UpDock *dock)
return TRUE; return TRUE;
} }
/**
* up_dock_coldplug:
**/
void
up_dock_set_should_poll (UpDock *dock, gboolean should_poll)
{
if (should_poll && dock->priv->poll_id == 0) {
dock->priv->poll_id = g_timeout_add_seconds (UP_DOCK_POLL_TIMEOUT,
(GSourceFunc) up_dock_poll_cb,
dock);
} else if (dock->priv->poll_id > 0) {
g_source_remove (dock->priv->poll_id);
dock->priv->poll_id = 0;
}
}
/** /**
* up_dock_coldplug: * up_dock_coldplug:
**/ **/
@ -111,9 +127,6 @@ up_dock_coldplug (UpDock *dock, UpDaemon *daemon)
{ {
/* save daemon */ /* save daemon */
dock->priv->daemon = g_object_ref (daemon); dock->priv->daemon = g_object_ref (daemon);
dock->priv->poll_id = g_timeout_add_seconds (UP_DOCK_POLL_TIMEOUT,
(GSourceFunc) up_dock_poll_cb,
dock);
return up_dock_refresh (dock); return up_dock_refresh (dock);
} }

View file

@ -51,6 +51,8 @@ GType up_dock_get_type (void);
UpDock *up_dock_new (void); UpDock *up_dock_new (void);
gboolean up_dock_coldplug (UpDock *dock, gboolean up_dock_coldplug (UpDock *dock,
UpDaemon *daemon); UpDaemon *daemon);
void up_dock_set_should_poll (UpDock *dock,
gboolean should_poll);
G_END_DECLS G_END_DECLS