mirror of
https://gitlab.freedesktop.org/upower/upower.git
synced 2025-12-20 12:30:02 +01:00
Add an option for polling dock devices in UPower.conf, defaulting to false
This commit is contained in:
parent
11301ae3d6
commit
38199e44ff
5 changed files with 62 additions and 3 deletions
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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) \
|
||||||
|
|
|
||||||
|
|
@ -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");
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue